2016-04-08 7 views
-2

Ich bin gerade etwas verwirrt. Ich habe den folgenden asynchronen Ajax-Anruf, bei dem ich einen erfolgreichen Rückruf übergebe.

ajax('PUT', 'some URL', successCallback, data); 

Ich beobachte, dass dieser Rückruf aufgerufen wird, wenn die Anforderung abgeschlossen ist, so verstehe ich nicht, zu verstehen, wie dieser Aufruf asynchron ist, wenn er wartet auf den Anruf zu beenden.

Wenn ich nicht passieren die successcallback den Rückruf von der Funktion Ajax und kehre ich asynchrones Verhalten beobachten können, wie

ajax('PUT', 'some URL', undefined, data); 
return successcallback(); 

Mit über Änderung erwartete ich die Ajax-Aufruf tatsächlich beobachten asynchron und meine Seite kann die Ausführung gehen Wenn die Seite jedoch auf einen anderen Link umleitet, wird die Anfrage abgebrochen. Die einzige Option, die funktioniert, ist die Übergabe von succesCallback für AJAX, aber es scheint eher synchrone als asynchrone

+1

Weil der Code nach dem Ajax-Aufruf ausgeführt wird .... Was Sie beschreiben, ist synchron. – epascarello

+0

Ich glaube, du verstehst falsch, was asynchron ist. 'successCallback' wird aufgerufen, wenn die Anfrage abgeschlossen ist, * aber *, Sie haben keine Versprechen, wann die Anfrage abgeschlossen wird. Darüber hinaus wird der Rest Ihres Codes weiterhin ausgeführt und nicht blockiert, wenn Sie darauf warten, dass 'successCallback' ausgeführt wird. –

Antwort

1

Ich denke, Sie haben Ihre Terminologie rückwärts. "Asynchron" bedeutet in diesem Zusammenhang "läuft zu einem späteren Zeitpunkt ab und blockiert nicht die sofortige Ausführung von Code". "Synchron" ist ein blockierender Aufruf, der die Ausführung anhält, bis sie abgeschlossen ist.

Der Rückruf dort soll ausgeführt werden, wenn die Anfrage abgeschlossen ist, was definitionsgemäß "asynchron" ist. Ihre alternative Version führt den Erfolgsrückruf unabhängig aus, und zwar so lange, bis der AJAX-Aufruf initiiert wird, und nicht zu wissen, ob es erfolgreich ist.

Sie müssen asynchrone Aufrufe durchführen, sonst sind der JavaScript-Code und die Engine vollständig blockiert und warten auf eine Antwort. Dies war früher akzeptabel, wenn dies ein separater Prozess ohne andere Verantwortlichkeiten ist, aber es ist eine Katastrophe in einer Webanwendung, in der Ihr Code wahrscheinlich andere Dinge hat, auf die er reagieren muss.