在 javascript 代码之前触发 Ajax 调用

Trigger Ajax calls before javascript code

在我当前的代码中,我用 ajax 调用填充对象 arr。通话结束后,我想对它们进行分类。我填充 arr 的代码工作正常,但代码的顺序不是我想要的。

在调试模式下,我看到他首先尝试对空的 Arr 进行排序,然后 ajax 调用是 运行ning。

有没有办法先 运行 整个 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]);
}
  1. 将异步设置为 false

    $.ajax({ url: "http://api.viewer.zmags.com/schedules/" + schedule_id[i] + "?key=" + api_key, 异步:假 })

  2. 将您的代码移至 done 函数

无法向主线程添加评论,根据您的评论,您似乎遇到了一些同步问题,所以我建议您花一些时间在 this (jquery deferred object) 上,我想这可能是您问题的解决方案