2016-04-08 8 views
-2

今私はちょっと混乱しています。私はsuccesscallbackを渡している次の非同期Ajax呼び出しを持っています。

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

私は、要求がので、私はそれが完了するの呼び出しを待っている場合、この呼び出しは非同期であるかを理解するために失敗完了すると、このコールバックが呼び出されることを確認します。

私はアヤックスにsuccesscallbackを渡し、関数からコールバックを返さない場合は上記の変更に伴い

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

を予想通り、私は非同期動作を観察することができ、私は実際には非同期で実行するAJAX呼び出しを観察し、自分のページには進むことができますページが他のリンクにリダイレクトされた場合、リクエストはキャンセルされます。だから、動作する唯一のオプションは、ajaxのsuccesCallbackを渡していますが、非同期ではなく同期しているようです。

+1

Ajax呼び出しの後のコードが実行されるため....あなたが記述する内容は同期です。 – epascarello

+0

私はあなたが非同期であると誤解していると思います。 'successCallback'は要求が完了したときに呼び出されますが、*あなたは要求が完了することを約束していません。さらに、残りのコードは引き続き実行され、 'successCallback'が実行されるのを待ってブロックされません。 –

答えて

1

あなたはあなたの用語を逆にしていると思います。この文脈での「非同期」とは、「将来のある時点で実行され、コードの即時実行をブロックしない」ことを意味します。 「同期」はブロッキングコールで、完了するまで実行を停止します。

コールバックは、リクエストが完了したときに実行されることを意図しています。これは定義上「非同期」です。あなたの代わりのバージョンはsuccessコールバックを関係なく実行し、AJAX呼び出しが開始されるずっと前にそれを行い、成功するかどうかを知らない。

非同期呼び出しを行う必要があります。そうしないと、JavaScriptコードとエンジンが応答を待って完全に詰まってしまいます。これは、これが他の責任を持たない別個のプロセスである場合には許容されていましたが、あなたのコードに応答する必要がある他のものがある可能性があるWebアプリケーションでは災害です。

関連する問題