2009-08-07 16 views
8

Qual è il modo corretto di assegnare a una variabile la risposta da jQuery.get()?Assegna jQuery.get() a una variabile?

var data = jQuery.get("output.csv"); 

Stavo leggendo che jQuery.get() deve avere una funzione di callback? perché? e come userò questa funzione di callback per assegnare la risposta alla variabile dei dati?

Grazie in anticipo per il vostro aiuto e chiarimenti.

Aggiornamento:

Grazie a tutti per le vostre risposte e spiegazioni. Penso di iniziare a capire finalmente quello che stai dicendo. Il mio codice qui sotto sta facendo la cosa giusta solo la prima iterazione di esso. Il resto delle iterazioni la sua scrittura nella pagina non definita. Mi manca qualcosa?

<tbody> 
<table id="myTable"> 

    <script type="text/javascript"> 

     $.get('output.csv', function(data) { 
       csvFile = jQuery.csv()(data); 

       for (var x = 0; x < csvFile.length; x++) { 
        str = "<tr>"; 
        for (var y = 0; y < csvFile.length; y++) { 
         str += "<td>" + csvFile[y][y] + "</td>"; 
        } 
        str += "</tr>"; 
       } 
       $('#myTable').append(str); 


     }); 

    </script> 

</tbody> 
</table> 

risposta

1

È sufficiente specificare la funzione di richiamata nel parametro per ottenere il metodo. I tuoi dati saranno nella variabile specificata nella funzione.

$.get("output.csv", function(data) { 
    // Put your function code here, the 'data' variable will hold your data. 
}); 
8

Una funzione di callback è richiesta per chiamate di funzione asincrone, come un GET richiesta AJAX. C'è un ritardo tra chiamare la funzione get e ottenere una risposta, che potrebbe essere un millisecondo o diversi minuti, quindi è necessario avere una funzione di richiamata che viene chiamata quando il GET asincrono ha completato il suo lavoro.

Ecco alcune ulteriori informazioni sulla funzione AJAX get di jQuery: http://docs.jquery.com/Ajax/jQuery.get#urldatacallbacktype.

Da esempi di jQuery:

// this would call the get function and just 
// move on, doing nothing with the results 
$.get("test.php"); 

// this would return the results of the get 
$.get("test.php", function(data){ 
    alert("Data Loaded: " + data); 
}); 

Se si ottiene undefined quando si tenta di utilizzare la variabile data nella funzione di callback, aprire la console di Firebug in Firefox e guardare la richiesta get. È possibile visualizzare la richiesta non elaborata e la risposta con cui viene restituita. Dovresti ottenere una migliore indicazione del problema dopo aver visto cosa viene inviato al server e cosa viene inviato al client.

+0

così, come si fa a soluzione alternativa sempre indefinito? –

+0

Ho aggiornato la mia risposta con un suggerimento per aiutare a risolvere la variabile di dati non definita. –

+0

@DCrawmer controlla cosa sta dicendo la pixeline. se l'analisi della richiesta get sta prendendo troppo è meglio prendere i dati nel callback. in realtà questo è il modo corretto per farlo. –

3

In realtà nel tuo esempio i dati saranno l'oggetto di richiesta XMLHttpRequest.

var x; 
$.get('output.csv', function(data){ 
    x = data; 
    console.log(x); // will give you the contents. 
}); 
+0

Dato (a mia conoscenza) che 'get' è asincrono, il' log' non dovrebbe stampare 'undefined' ogni volta? –

+0

sì, questo codice mi sta dando indefinito ogni volta, come posso impedirlo? –

+1

mettere la chiamata console.log() all'interno del callback! – pixeline

3

tsvanharen risposto alla domanda bene, ma DCrawmer di ancora manca il punto. Lasciatemi tentare un chiarimento per lui. Sto semplificando eccessivamente questo aspetto e lisciando alcuni dettagli.

Guardare il codice mostrato di seguito. Questo è più o meno lo stesso codice tsvanharen di, se non che ho sostituito la funzione anonima per la richiamata con un puntatore a funzione reale, e sono un po 'più esplicito in modo da poter vedere cosa sta succedendo:

var x = null; 

function myCallback(data) 
{ 
    alert("Data Loaded:" + data); 
} 

$.get("test.php", myCallback); 

// the rest of your code 
alert("The value of X is: " + x); 

Assumendo che test.php prende anche un momento o due per caricare, notare l'ordine che gli allarmi probabilmente venire in:

1. "The value of X is" 
2. "Data Loaded" 

la funzione $.get() piste istantaneamente. JavaScript si sposta e esegue il resto del codice subito.In sottofondo, sta recuperando la tua pagina su test.php. jQuery nasconde alcuni dei dettagli disordinati di questo.

La funzione di callback (il secondo argomento di $.get()) viene eseguito in seguito (in modo asincrono ). Oppure, detto in altro modo, la funzione myCallback è un gestore di un evento. L'evento è "$.get() ha terminato il recupero dei dati". Non funziona fino a quel punto. Non funziona quando si esegue $.get()! $.get() ricorda solo dove è quella funzione per dopo.

La funzione myCallback può essere eseguita in millisecondi o minuti dopo, molto tempo dopo che è stato risolto $.get().

Se myCallback non viene eseguito fino a qualche minuto più tardi, qual è il valore di x quando viene eseguito il codice "Il valore di X"? È ancora null. C'è il tuo bug.

Per utilizzare i dati recuperati dalla pagina nello script, devi fare le cose più in questo modo:

  1. Avviare lo script, dichiarare la variabile per contenere i dati.
  2. Chiama $.get(), con una funzione di richiamata per gestire il reso.
  3. Non fare nient'altro. [O, almeno, niente che richiede i dati] Lascia che la pagina si sieda lì.

    ... in futuro ...

    X. La vostra funzione di callback otterrà run, ed avere i risultati della vostra pagina web. La funzione di richiamata può: * Visualizzare i dati * Assegnare i dati a una variabile * Chiamare altre funzioni * Vai avanti è allegra.

+0

grazie mille per il chiarimento. per favore vedi il mio aggiornamento alla domanda e dimmi cosa sto sbagliando? grazie per l'aiuto. –

+0

Dividere e conquistare. Assicurati che jQuery.get stia effettivamente restituendo i dati che pensi siano. Metti un avviso (dati) all'inizio della funzione per assicurarti che i dati siano stati letti correttamente da output.csv. (Questo non è un url ben formato, sei sicuro che sia quello che vuoi?) Procedi da lì. –

3

ho davvero lottato con ottenere i risultati di jQuery Ajax in mio variabili in fase di "document.ready" degli eventi.

L'ajax di jQuery viene caricato nelle mie variabili quando un utente ha attivato un evento "onchange" di una casella di selezione dopo che la pagina è già stata caricata, ma i dati non alimentano le variabili quando la pagina è stata caricata per la prima volta.

ho provato molti, molti, molti metodi differenti, ma alla fine, la risposta che mi serviva era a questa pagina StackOverflow: JQuery - Storing ajax response into global variable

Grazie al collaboratore Carlo Guilbert, io sono in grado di ottenere i dati in mio variabili, anche quando la mia pagina viene caricata per la prima volta.

Ecco un esempio dello script di lavoro:

jQuery.extend 
    (
     { 
      getValues: function(url) 
      { 
       var result = null; 
       $.ajax(
       { 
       url: url, 
       type: 'get', 
       dataType: 'html', 
       async: false, 
       cache: false, 
       success: function(data) 
       { 
        result = data; 
       } 
       }); 
      return result; 
      } 
     } 
    ); 

// Option List 1, when "Cats" is selected elsewhere 
optList1_Cats += $.getValues("/MyData.aspx?iListNum=1&sVal=cats"); 

// Option List 1, when "Dogs" is selected elsewhere 
optList1_Dogs += $.getValues("/MyData.aspx?iListNum=1&sVal=dogs"); 

// Option List 2, when "Cats" is selected elsewhere 
optList2_Cats += $.getValues("/MyData.aspx?iListNum=2&sVal=cats"); 

// Option List 2, when "Dogs" is selected elsewhere 
optList2_Dogs += $.getValues("/MyData.aspx?iListNum=2&sVal=dogs"); 
Problemi correlati