2013-04-06 10 views
22

Ich möchte eine Funktion, die einen Wert aus einer Ajax-Anfrage zurückgibt. Ich möchte JavaScript-Ausführung stoppen, bis die Funktion ihren Wert erhält, der von asynchronen Ajax-Anforderung zurückgegeben wird. Etwas wie:Funktion, die einen Wert von Ajax Call Request zurückgeben

function myFunction() { 
    var data; 
    $.ajax({ 
     url: 'url', 
     data: 'data to send', 
     success: function (resp) { 
      data = resp; 
     }, 
     error: function() {} 
    }); // ajax asynchronus request 
    return data; // return data from the ajax request 
} 
+2

Wofür steht das erste A in AJAX? – Barmar

+0

@Barmar Aaardvark! – Ian

Antwort

32

Sie benötigen einen Callback-Funktion, um so etwas registrieren:

+2

Es ist nicht notwendig, es in 'Daten' zu speichern. Rufen Sie einfach den Rückruf – Ian

+1

@Ian noch besser als der Rest der Kin :-) –

+1

@JanDVorak Niemals gesagt, es war nicht :) Nur versuchen, um die Antwort zu verbessern. – Ian

2

Verwenden async: false für Ihren Ajax-Request seit Ajax asynchron.

Wenn Sie async auf false setzen, muss die Anweisung, die Sie aufrufen, abgeschlossen sein, bevor die nächste Anweisung in Ihrer Funktion aufgerufen werden kann. Wenn Sie async: true setzen, beginnt diese Anweisung mit der Ausführung und die nächste Anweisung wird aufgerufen, unabhängig davon, ob die asynchrone Anweisung bereits abgeschlossen wurde.

Von jQuery docs:

By default, all requests are sent asynchronously (i.e. this is set to true by default). If you need synchronous requests, set this option to false

+1

Sie müssen eine bessere Erklärung geben als das. Während das funktionieren könnte, wird das OP wahrscheinlich nicht verstehen, da sie das Problem nicht verstehen. – Ian

3
$.ajax({ 
     url: 'url', 
     data: 'data to send', 
     async: false, 
     success: function (resp) { 
      data = resp; 
     }, 
     error: function() {} 
    }); // ajax synchronus request 
4

Sie brauchen asyn zu tun = False wie:

$.ajax({ 
    async: false, 
    // ... 
    success: function(jsonData) { 
    //Your Logic 
    } 
}); 
+1

Das ist natürlich, wenn Sie eine synchrone Antwort wünschen. – Pere

5

Ajax ist asynchron, dh der Ajax-Aufruf wird ausgelöst, aber der Code läuft so gut wie zuvor ohne anzuhalten weiter. Ajax stoppt die Ausführung nicht, bis eine Antwort empfangen wird. Sie müssen eine zusätzliche Rückruffunktion oder etwas Ähnliches hinzufügen.

function myFunction() { 
var data; 
$.ajax({ 
    url: 'url', 
    data: 'data to send', 
    async: false, 
    success: function (resp) { 
     data = resp; 
     callback.call(data); 
    }, 
    error: function() {} 
}); // ajax asynchronus request 
return data; // return data from the ajax request 
    } 
+0

Sie müssen tatsächlich 'data' oder' resp' zum Callback übergeben ... – Ian

+0

yes rgt ... .Tahnx @lan .... zum Umleiten von mir .... :) –

+1

Nun, wahrscheinlich möchten Sie 'callback.call (this, data);' da 'call''s erster Parameter zum Setzen des' this' Kontext ist in der Funktion. – Ian

Verwandte Themen