2017-05-14 2 views
0

Ich bin mir nicht sicher, ob ich genau wie verzögert, Versprechen und $.when() arbeiten. Ich habe gelesen https://api.jquery.com/jquery.when/, aber ich bin neugierig, ob eine Funktion mit einem Ajax-Aufruf innerhalb $.when() verwendet werden kann.

Ich sehe dieses Beispiel auf der Dokumentation:

$.when($.ajax("test.aspx")).then(function(data, textStatus, jqXHR) { 
    alert(jqXHR.status); // Alerts 200 
}); 

Ist das auch eine akzeptable Methode?

$.when($.ajax(anotherFunction())).done(
//on completion of the ajax call inside "anotherFunction()" do something here. 
); 

anotherFunction(){$.ajax...do some ajax stuff here.} 

Der spezielle Fall ich bin auf der Suche ist eine Liste der verfügbaren Armaturenbrett Laden, dann einmal die Liste auf dem vorderen Ende aufgefüllt wird, erfassen eine bestimmte Armaturenbrett aus der Liste und eine Ladefunktion für sie laufen.

Ich finde, dass es nicht bricht und wird laufen (vielleicht?), Aber ich weiß nicht, ob es der richtige Weg ist, es zu kodieren oder wenn es gerade nicht funktioniert und nicht gleichzeitig bricht.

Vielen Dank für jegliche Beratung und Expertise zu diesem Thema!

-Jeff

+0

'$ .when' ist für einen einzigen Ajax-Aufruf rendantant ... nur zweitens im Rückruf des ersten, wenn die benötigten Daten verfügbar sind – charlietfl

Antwort

0

[...], wenn eine Funktion mit einem Ajax-Aufruf kann innerhalb von $ .when() verwendet werden.

Ihr Beispiel würde funktionieren, wenn Sie die umliegenden $.ajax und die Funktion selbst gibt die $.ajax -Aufruf überspringen. Wenn das, was Sie an $.when übergeben, kein Deferred ist (in Ihrem Fall gibt die Funktion undefined zurück), wird es sofort aufgelöst, was ich denke, ist nicht das, was Sie wollen. Darüber hinaus ist $.when sinnlos, wenn Sie nur einen einzigen Deferred haben. Wenn Ihre Funktion die $.ajax zurückgibt, können Sie einfach etwas wie anotherFunction().done(...) tun.

Der spezielle Fall ich bin auf der Suche ist eine Liste der verfügbaren Armaturenbrett Laden, dann einmal die Liste auf dem vorderen Ende aufgefüllt wird

der Tat, das ist die Idee hinter $.when: mehrere latente Warten auf beenden. Sie können sie einfach als Parameter übergeben, z.

let d1 = $.ajax(...); 
let d2 = $.ajax(...); 

$.when(d1, d2).done(...) 

Aber wenn Sie nur ein Ajax-Aufruf haben, werden Sie nicht $.when brauchen.

+0

aber OP fragt nach abhängigen Ajax-Aufruf, nicht seriell – charlietfl

Verwandte Themen