在我当前的代码中,我正在使用ajax调用填充Object arr。通话结束后,我想对它们进行排序。我填写arr的代码工作正常,但代码的顺序不是我想要的。
在调试模式下,我看到他首先尝试对空的Arr进行排序,然后运行ajax调用。
有没有办法说首先运行整个Ajax脚本并在填充后运行排序部分?
代码:
//Sortering
var arr = {};
var key = "";
var teller = 0;
for (var i = 0; i < schedule_id.length; i++) {
//Ajax call maken
$.ajax({
url: "http://api.viewer.zmags.com/schedules/" + schedule_id[i] + "?key=" + api_key
})
.done(function(data) {
//Check publicatieID is not null
if (undefined === data.scheduleEntries[default_pub] || null === data.scheduleEntries[default_pub]) {} else {
var key = schedule_id[teller];
//loopen doorheen resultaat call
$.each(data.scheduleEntries, function(index, entry) {
arr[key] = entry.startDate;
})
}
teller++;
})
}
//////////////////////////////////////////////////////////////////////////
//I want this part after the arr is filled
var timeArray = [],
newObj = {};
for (var key in arr) {
timeArray.push([key, arr[key]]);
}
timeArray.sort(function(a, b) {
return new Date(a[1]) - new Date(b[1])
});
//console.log(timeArray);
var j = 0,
k = 1;
for (var i = 0; i < timeArray.length; i++) {
newObj[timeArray[i][j]] = new Date(timeArray[i][k]);
}
答案 0 :(得分:0)
无法在主线程中添加评论,根据你的评论,看起来你有一些同步问题,所以我建议你花一些时间在this (jquery deferred object),我想它可能是解决方案你的问题
答案 1 :(得分:-1)
将async设置为false
$。AJAX({ url:&#34; http://api.viewer.zmags.com/schedules/&#34; + schedule_id [i] +&#34;?key =&#34; + api_key, async:false })
将您的代码移至完成功能