2010-11-17 5 views
6

Warum ist die returnValue von dieser Funktion immer gleich dem Standardwert am Anfang der Funktion und nie auf den Wert aus der JSON-Suche abgerufen?

+0

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

+0

möglich Duplikat von [Wie die Antwort von einem AJAX-Aufruf zurück? ] (http://stackoverflow.com/questions/14220321/how-to-return-the-response-from-an-ajax-call) – Bergi

Antwort

11

Das passiert, weil diese Callback-Funktion (function(data) {...}) später ausgeführt wird, wenn die Antwort zurückkommt ... weil es eine asynchrone Funktion ist. Anstatt den Wert benutzen, wenn Sie es eingestellt haben, wie folgt aus:

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); 
    }); 
} 

Dies ist die Art und Weise alle asynchrones Verhalten sollte sein, kick off, was den Wert braucht, wenn Sie es haben ... was ist, wenn der Server mit antwortet Daten.

3

Die Funktion, die Sie getJSON passieren wird ausgeführt werden, wenn die Antwort auf die HTTP-Anforderung kommt, die sofort nicht ist.

Die Return-Anweisung führt vor die Antwort, so dass die Variable noch nicht festgelegt wurde.

Lassen Sie Ihre Callback-Funktion tun, was mit den Daten zu tun ist. Versuche nicht, es zurückzugeben.

8

Wenn Sie keine asynchrone Funktion verwenden möchten, verwenden Sie besser die folgende:

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

Diese Funktion wartet, bis der Wert von dem Server zurückgegeben wird.

+0

empfehle verwenden ** responseJSON ** .. danke, funktioniert gut! – KingRider

Verwandte Themen