Ajax呼び出しの実行中に、ブラウザーウィンドウでユーザーにアラートが表示されたら、どうなるのだろうと思っていました。
たとえば、私がajaxコールを持っているとしましょう
$.ajax({
url: ...,
type: GET/POST,
...
success: function(data){
console.log(data);
},
error: ...
});
完了するまでに長い時間がかかります(10秒)。呼び出しが実行されている間、単純なjavascriptアラートがスローされます
alert("hello!");
たとえば、次の場合はどうなりますか。
JSがシングルスレッドであることを知っているので、スクリプトの実行が停止することを知っています。アラートウィンドウが「時間内に」閉じられない場合、ajaxの呼び出し/応答はどうなるのでしょうか。
私は十分に明確であり、これが「ダミー」の質問ではないことを願っています。ありがとうございました
これを試してみるのはそれほど難しいことではありません...しかし、答えは、アラートが優先され、実行の流れを妨げるということです。
アラートを閉じ、アラートが開いている間にAJAXリクエストが完了したと仮定すると、success
関数(またはerror
関数)が処理されます。
AJAXリクエストはアラートが表示されている間も実行され続けます(したがって、長時間実行されているAJAXはアラートが開いている間処理できます))が、アラートが閉じられるまで、スクリプトがリクエストの処理を続行できないというだけです。
これが実際の例です 、アラートが閉じられるまでデータがコンソールに書き込まれないことに注意してください。
注意すべきもう1つのポイントは、アラートが閉じた後、スクリプトは残りの関数(alert
の直後のコード)beforeAJAX応答が処理されます。 これは私が何を意味するかを示すのに役立ちます
HTTPリクエストは引き続き実行され、バックグラウンドで処理されます。
JSイベントループが解放されると、readystatechangeハンドラーが起動します。
一部の中間準備完了状態は、その状態が真である間にイベントループがビジーであったため、スキップされる場合があります。