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