おはようございます -
$.ajax
コールが終了したかどうかを確認するよく知られた方法はありますか?
- INSTANCE FOR -
のは、私が(非同期層群など).geojsonファイルからリーフレットの多数のポリゴンにロードするために$.ajax
コールを使用していましょう。通常の状況下では、これはほぼ即座に発生しますが、ユーザーは今度は大規模なジョブをロードすることを選択しました。ユーザーは、ポリゴンのセットがロードされているとみなし、このグループのレイヤーで早すぎる何かをしようとします。何も起こらない(レイヤーグループは実際にブラウザーには存在しません)。
私の直感(私はウェブ開発の初心者です)は、依存アルゴリズムがチェックするように設定された何らかの種類のグローバルフラグを持つことです。レイヤーをロードする前にフラグを設定して、$.ajax
コールの.done({})
セクションの他の値に変更します。
- UPDATE -
私は、ユーザーが要求を再試行するかどうかを選択し、また、再試行する前に要求をいくつかの時間を待つように、ブラウザを強制的にできるようにするコードを作り直しました。
しかし、この問題はChromeで発生しているようです。 Firefoxは、終了するとすぐに$ .ajax.alwaysコールバックを処理できるように見えます(つまり、$ .ajax.alwaysコールバックはJavaScriptの通常の流れを妨害します)。
Chromeは$ .ajax.alwaysコールバックをブロックして表示され、他のすべてのjavascriptの実行が完了した後でのみ(割り込みなし)実行されます。
この特定の質問は、ループ内からのユーザー入力を自動化するデバッグケースに起因しています。現在のプロセスが完了するまでChromeが$ .ajax.alwaysコールバックを呼び出さないため、プロセスは完了しました。
コード例:
procBox = []; // Global scope, stands for Process Box
function loadPolygons() {
procBox["loadPolygons"] = "running";
$.ajax({
// ajax things here
}).done(function() {
procBox["loadPolygons"] = "done";
}).fail(function() {
// failure stuff here
});
}
function dependentFunction() {
if procBox["loadPolygons"] === "done") {
// The meat of the function (dependentFunction things here)
} else {
// Backup case that allows the browser to retry the request
/* --
* If this fires, the server is still trying to process the
* ajax request. The user will be prompted to retry the request,
* and upon agreement, the function will be called again after
* 1 second passes.
*/
var msg = "Oops! It looks like we're still fetching your "
+ "polygons from the server. Press OK to retry.";
if (confirm(msg)) {
setTimeout(dependentFunction, 1000);
}
}
}
このアプローチは、Firefoxでうまく動作するようです - alert()
は、JavaScriptの実行を停止し、それを.done({})
コールバックが発生するために機会を与えてくれます。しかし何らかの理由でwhileループで.done({})
コールバックがChromeで完了することはありません。
フラグやasync: false
を使用するよりも優れた方法は誰にも分かりますか?
回答と知識がありがとう!
JavaScriptを無期限にブロックしないでください。タイムアウトまたは間隔を使用します。 – tkausl
「約束」を読む。もう少し周りを頭で囲む必要があります。 – zero298
あなたは '。always(...) 'を探しているかもしれません。 'try/catch'の' finnaly'のようですが、jqueryの 'done/fail'のため – notgiorgi