Javascript Can';t让jQuery以正确的顺序执行代码

Javascript Can';t让jQuery以正确的顺序执行代码,javascript,jquery,ajax,Javascript,Jquery,Ajax,我有一些订购问题。我有一些代码可以执行以下操作: 在页面加载时,循环浏览3个表,从服务器获取内容,并用所述内容填充表 使桌子反应灵敏 我在工作中遇到了一些问题。我可以通过inspect元素(调用函数)来实现这一点,但这并不友好。我想知道是否有一种方法可以选择正在执行的函数的顺序。 到目前为止,我得到的是: $(document).ready(function() { if (dateCounter == null){ //start calendar from today's date

我有一些订购问题。我有一些代码可以执行以下操作: 在页面加载时,循环浏览3个表,从服务器获取内容,并用所述内容填充表 使桌子反应灵敏

我在工作中遇到了一些问题。我可以通过inspect元素(调用函数)来实现这一点,但这并不友好。我想知道是否有一种方法可以选择正在执行的函数的顺序。 到目前为止,我得到的是:

$(document).ready(function() {
    if (dateCounter == null){ //start calendar from today's date
        var current = new Date();
        dateChange(current, "", 0); //function one to get grab all contents

        //make table responsive
        var switched = false;
              var updateTables = function() {
                if (($(window).width() < 992) && !switched ){
                    console.log("window width < 992px");
                  switched = true;
                  $("table.responsive").each(function(i, element) {
                      console.log("splitting table up");
                    splitTable($(element));
                  });
                  return true;
                }
                else if (switched && ($(window).width() > 992)) {
                  switched = false;
                  $("table.responsive").each(function(i, element) {
                    unsplitTable($(element));
                  });
                }
              };
        function splitTable(original){...}
        function unsplitTable(original){...}
    }
});

是的,AJAX调用是异步的<代码>$。ajax返回一个承诺,您可以使用它来控制序列。首先,从
dateChange
返回承诺:

function dateChange(dateInput, nGuests, vName){
    return $.ajax({
      //...
    });
}
那么当你叫它:

dateChange(current, "", 0).then(function() {

    //make table responsive
    var switched = false;
    //....
}
这将确保在使表响应之前完成AJAX调用

如果有多个AJAX调用,则必须将承诺存储在一个数组中并使用
$

var promises = [];
$('.whatever').each(function() {
    var promise = $.ajax({ /*...*/ });
    promises.push(promise);
});

$.when.apply($, promises).done(function() {
    console.log('all done');
    // do work....
});

注意我们必须使用
函数.prototype.apply
,因为
$。当
将一系列承诺视为一个承诺时。

这可能会解释您的问题:在dateChange()中调用updateTables()callback@MarcoMagrini我尝试过这种方法,但我都尝试过不幸的是,在我的dateChange函数中,使我的表非常混乱。是在
$(window.resize()
?@ArturFilipiak上调用的
updateTables
方法。因此,如果窗口大小为992px,我可以调用updateTables并使其像这种方法一样无响应,但是在进行这些更改并运行代码时,我遇到了错误“Uncaught TypeError:无法读取未定义的属性'then',它与“dateChange(current)”,0有关。然后(function(){”您使用的是哪个版本的jQuery?或者您使用的是1.8之前的jQuery版本,或者您没有从
dateChange
函数返回承诺……我使用的是1.9.1I版本,我还有以下内容:return$.ajax({url://availability\u Dev/availability\u Dev.asp?boatType=“+boatName+”&date=“+dateInput+”&guests=“+guests+”&boatName=”+vName+“”,数据类型:“html”,成功:函数(数据){table.html(数据);});
var promises = [];
$('.whatever').each(function() {
    var promise = $.ajax({ /*...*/ });
    promises.push(promise);
});

$.when.apply($, promises).done(function() {
    console.log('all done');
    // do work....
});