Jquery load() e le variabili PHP

Se io carico una pagina PHP con Jquery .carico(file.php), può il file incluso utilizzare il php le variabili che sono stati definiti sulla pagina che si chiama load()?

  • Ciao @user1091856 – benvenuti a COSÌ. È buona norma accettare una risposta se funziona per voi (non solo a questa domanda, ma ogni quattro le domande precedenti). evviva!

 

6 Replies
  1. 13

    Sei incomprensione come funzionano le cose.

    • PHP viene eseguito prima qualsiasi browser risposta è rilasciato al cliente, e tutto il codice viene eseguito sul server. Le variabili dichiarate nel file PHP sono distrutto dopo tutto il codice PHP è stato eseguito; “svaniscono.”
    • JavaScript viene eseguito dopo il browser risposta è iniziato, e tutto il codice viene eseguito sul client. Da “caricare” il risultato di output del file PHP, non si otterrà alcun accesso al PHP le variabili, solo l’uscita.

    Se si desidera trasferire alcune variabili da PHP a JavaScript, si potrebbero accumulare qualche uscita in JSON nel tuo script PHP, in questo modo:

    <?PHP
        header("Content-Type: application/json");
    
        $myVariable = "hello world";
    
        echo json_encode(array(array("myVariable" => $myVariable)));
    
        /* Output looks like this:
           [
               {
                   "myVariable": "hello world"
               }
           ]
        */
    ?>

    JavaScript/JSON dovrebbe essere qualcosa di simile a questo:

    $.getJSON("test.php", function(result) {
        console.log(result[0].myVariable);
    });

    Che senso ha?

    • Mi piace la tua chiara spiegazione di perché non funziona e che wny io con voto positivo la risposta. Ma il tuo suggerimento per generare JSON con la pianura escape echo bilancio è spaventoso; per questo motivo json_encode() esiste.
    • A destra, le mie scuse. Stavo solo cercando di fare è abbastanza facile da capire. E ‘ stato un po da quando ho usato PHP, e non ho in passato avuto per la serializzazione JSON da PHP, quindi il mio male.
    • Editato la mia risposta per usufruire di json_encode.
    • Abbastanza sicuro di sapere la risposta, ma un associativo chiamata funziona con questo, giusto? console.log(result['myVariable']);?
    • Perché ci sono DUE matrici e sarebbe solo separare le variabili multiple con una virgola?
  2. 15

    No, devi passare le variabili che si desidera utilizzare per il vostro file.php:

    $('#yourdiv').load('file.php?var1=xyz&var2=xyz&var3=xyz');

    E quindi è possibile OTTENERE quelli che sono nella tua file.php:

    $var1 = $_GET['var1'];
    $var2 = $_GET['var2'];
    $var3 = $_GET['var3'];

    Se ci sono un sacco di variabili, utilizzare il metodo POST:

    $('#yourdiv').load('file.php', {var1:x, var2:y, var3:z})

    E quindi ottenere le variabili in file.php:

    $var1 = $_POST['var1'];
    $var2 = $_POST['var2'];
    $var3 = $_POST['var3'];
    • Questo funziona troppo…vorrei solo sostituire il 'file.php?var1=xyz&var2=xyz&var3=xyz' con 'file.php?var1={$xyz}&var2={$xyz}&var3={$xyz}' se si utilizzano le variabili popolato da corrente del file PHP. Di nuovo, tutta la linea dovrebbe essere visibile dall’interno i tag PHP.
    • Apprezzo questo metodo molto meglio dal momento che utilizza jQuery nativo load funzione.
  3. 5

    Sì, utilizzare il parametro di dati, vedere http://api.jquery.com/load/:

    $('#someelement').load(
        "test.php", 
        {
            'key1': '<?php echo $value1; ?>',
            'key2': '<?php echo $value2; ?>'
        } 
    );

    I parametri vengono registrate nel file di test.php e sono accessibili come:

    $_POST['key1']
    $_POST['key2']
    • Questa è una soluzione pulita, ma di tenere presente che se si desidera utilizzare le variabili definite nell’attuale PHP file, devi sostituire i valori con le variabili PHP eco dal di dentro i tag PHP.
  4. 0

    Si dovrebbe passare le variabili caricate un file PHP attraverso l’ .la funzione di carico.

    Esempio:

    $("#objectID").load("test.php", { 'choices[]': ["{$choice1}", "{$choice2}"] } );

    Le variabili definite nell’attuale file PHP sarebbe diventato parte di Javascript che carica il nuovo file PHP.

    • Naturalmente questa linea avrebbe dovuto essere stampato dal di dentro i tag PHP.
  5. 0

    variabili ambito nel PHP script caricato da JavaScript diverso dalla pagina che ha caricato il PHP script, quindi la risposta è no.

    ma è possibile definire variabili globali o utilizzare super variabili globali come ($_GET, $_POST, etc.) per ottenere quello che vuoi.

    • È possibile definire le variabili passate da Javascript nella pagina dinamicamente con PHP.
    • passato da Javascript è diverso da quello che l’OP chiede: can the included file use the php variables that were defined on the page that called the load().
    • È possibile utilizzare esattamente come TK Kocheran descritto (anche se json_encode() è altamente raccomandato). Hai ragione che javascript non è possibile accedere direttamente in PHP le variabili per la sequenza di carico nel ciclo di RISPOSTA, ma l’aggiunta di una riga di PHP per definire una variabile Javascript con lo stesso valore della variabile PHP non è inaudito, né è cattiva pratica, a meno che i valori delle variabili PHP sono sensibili. Utilizzare le variabili di Sessione probabilmente sarebbe meglio se dati sensibili è un problema.
  6. 0

    Il secondo argomento (params) di JQuery funzione del carico deve essere un oggetto o una funzione di callback, ma potrebbe anche essere una stringa vuota. A seconda che il carico non inviare post o get richieste.

    Ho avuto l’idea di passare automaticamente tra get e post, (per esempio, se il set di cookie),perché più veloce e cache in grado, e il post è più salvare.

    Suo peggio per scrivere la funzione di carico compreso il contenuto all’interno della funzione di callback per due volte di scrivere qualcosa di simile:

    //get
    var url="cache_dir/my_bag.html";
    var params="";
    if(document.cookie){
      //post
      url="post.php";
      params="{my:bag}";
      }
    $(selector).load(url,params,function(){
    ...
    
      });

Lascia un commento