2010-11-17 18 views
6

Perché il returnValue da questa funzione è sempre uguale al valore predefinito impostato all'inizio della funzione e mai al valore recuperato dalla ricerca JSON?

+0

Vedere http://stackoverflow.com/questions/3537434/cant-get-correct-return-value-from-an-jquery-ajax-call –

+0

possibile duplicato di [Come restituire la risposta da una chiamata AJAX? ] (http://stackoverflow.com/questions/14220321/how-to-return-the-response-from-an-ajax-call) – Bergi

risposta

11

Questo accade perché questa funzione di callback (function(data) {...}) corre tardi quando la risposta torna ... perché è una funzione asincrona. Invece utilizzare il valore una volta che avete impostato, in questo modo:

function lookupRemote(searchTerm) 
{ 
    var defaultReturnValue = 1010; 
    var returnValue = defaultReturnValue; 
    $.getJSON(remote, function(data) {   
     if (data != null) { 
       $.each(data.items, function(i, item) {     
        returnValue = item.libraryOfCongressNumber; 
       }); 
     } 
     OtherFunctionThatUsesTheValue(returnValue); 
    }); 
} 

Questo è il modo in cui tutto il comportamento asincrono dovrebbe essere, dare il via ciò che deve il valore una volta che lo avete ... che è quando il server risponde con dati.

3

La funzione si passa a getJSON viene eseguito quando la risposta alla richiesta HTTP arriva che è non immediatamente.

La dichiarazione di reso esegue prima della la risposta, quindi la variabile non è stata ancora impostata.

Fare in modo che la funzione di richiamata esegua ciò che è necessario fare con i dati. Non cercare di restituirlo.

8

Se non si desidera utilizzare la funzione asincrona, meglio utilizzare il seguente:

function getValue(){ 
    var value= $.ajax({ 
     url: 'http://www.abc.com', 
     async: false 
    }).responseText; 
    return value; 
} 

Questa funzione attende fino a quando il valore viene restituito dal server.

+0

consiglia l'uso ** responseJSON ** .. grazie, funziona bene! – KingRider

Problemi correlati