在javascript代码之前触发Ajax调用

时间:2015-02-19 07:55:01

标签: javascript ajax sequence

在我当前的代码中,我正在使用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]);
}

2 个答案:

答案 0 :(得分:0)

无法在主线程中添加评论,根据你的评论,看起来你有一些同步问题,所以我建议你花一些时间在this (jquery deferred object),我想它可能是解决方案你的问题

答案 1 :(得分:-1)

  1. 将async设置为false

    $。AJAX({         url:&#34; http://api.viewer.zmags.com/schedules/&#34; + schedule_id [i] +&#34;?key =&#34; + api_key,         async:false     })

  2. 将您的代码移至完成功能