これが私のセットアップです:私はいくつかの要素で.eachを呼び出しており、いくつかのチェックの後、いくつかのJSONデータを含むajaxリクエストを送信し、成功するとサーバーの応答を属性として各要素に適用します(通常はID)。その後、ID を配列にプッシュします。
問題は、明らかに ajax リクエストが非同期であり、すべての ajax が終了する前に要素 ID の配列を使用する関数が起動することです。
私は .when と .then を試しましたが、コールバック関数は ajax よりも先に起動され続けます。
これが私のコードの外観です(不要な部分をいくつか削除しました):
var order = [];
function sub(selector){
selector.each(function(){
var out = {
"some":"random",
"stuff":"here"
};
$.ajax({
type: "POST"
url: "/test/url",
dataType: 'json',
contentType: "application/json; charset=utf-8",
data:JSON.stringify(out),
success:function(response){
$(this).attr("data-response",response);
order.push(response);
}
})
})
}
$("#button").click(function(){
$.when(sub($(".test"))).then(function() {
console.log(order);
//i have to run the sub function twice so the order doesn't return undefined
});
});