私の問題はthis oneに似ていますが、私はこれらの回答で解決できませんでした。JQueryを使用して、進行する前にAJAX呼び出しとそのコールバックが終了するのを待つ方法はありますか?
要するに、ページロード時に、ajaxコールはドロップダウン選択要素を生成し、そのデフォルト値はいくつかのパラメータに応じて設定されます。
getList('country', null, q, 'category:customer', null);
newReportSelection.apply($("#report"));
function getList(field, val, q, fq, default_value) {
$.get(... {
// call info
}, function(result) {
// appending the dropdown to DOM
});
};
newReportSelection = function() {
// determine and select default option
}
私はAjaxのコールバック関数にこの(ページのロードに固有の)newReportSelection()のコードを追加することはできませんのでGETLISTは、さまざまな場所で使用されています
コードは次のようなものになります。
getList()呼び出しの約束をすることは、非同期であるため、Ajax呼び出しを待つことはありません。
Ajaxコールの周りにそれを置くことは、それが送信されるのを待ちますが、コールバック関数は実行されません。
Ajaxの部分は待機しているが、非同期性のためにgetList()が続行されているため、コールバック関数の周りに置くことはどちらもうまくいきません。
Ajax呼び出しで連鎖が約束され、コールバック関数が機能したとしても、それは非常に厄介な回避策であり望ましくないように見えます。
AJAX呼び出しを手動でasync: false
に設定せずに、getList()全体が完了するまでnewReportSelection()呼び出しを待機させる方法はありますか?
ありがとうございます。
ジャストコールnewReportSelection()はDOMに追加するajax done関数内にありますか? – juvian
私が言及したように、getList()関数はいくつかの場所で呼び出され、newReportSelection()部分はこれらのケースのうちの1つにしか適用できないため、できません。 – David
getList関数に新しいパラメータを指定すると、それは結果コールバック内でその関数をトリガして呼び出すコールバックです。それが他の場所で使用されている場合は、result関数内でコールバックを渡したかどうかをチェックし、そうでなければコールバックを実行します。 – quirimmo