小编典典

完成多个ajax请求后触发回调

ajax

loadInfo: function(){
    var jsonCounter = 0,
    room = ['room1','room2','room3'],
    dates = [],
    prices = []

    $.each(booking.rooms, function(key, room_name) {
        $.getJSON('/get_info.php?room='+room_name, function(data) {
            dates[room_name] = data
            jsonCounter++
        })
        $.getJSON('/get_info.php?room='+room_name+'&prices', function(data) {
            prices[room_name] = data
            jsonCounter++
        })

    })

    function checkIfReady() {
        if (jsonCounter === rooms.length * 2) {
            clearInterval(timer)
            run_the_rest_of_the_app()
        }
    }

    var timer = setInterval(checkIfReady, 100)

}

(做了很多修改,因为它是类的一部分,等等。)

目前,这有点让人讨厌,因为计时器的使用似乎很垃圾。我会使用$ .when和$ .done,但是我不知道可能有多少房间,所以我不知道什么时候放什么。

如何确保仅在所有AJAX请求返回后才调用run_the_rest_of_the_app()?


阅读 264

收藏
2020-07-26

共1个答案

小编典典

  • var activeAJAX = 0;

  • 在进行AJAX调用之前, activeAJAX++;

  • 完成AJAX调用后(在回调中): if (--activeAJAX == 0) { allDone(); }

2020-07-26