我有一个持续运行的应用程序,并在需要时自行更新。它使用ajax调用一个php文件来检查数据库上的一些数据,如果它已经改变,那么我们更新屏幕。 php似乎工作得很好,因为我遇到了问题。
$(document).ready(function () {
$('.trade_window').load('signals.php?action=init', setInterval(function () {
for(var i = 1; i < 6; i++) {
console.log('market_name_' + i + " is " + $('.market_name_' + i).text().trim());
$.ajax({
url: 'signals.php?action=check¶m=' + JSON.stringify({
'market_number': i,
'market_name': ('.trade_window .market_name_' + i).text().trim(),
'trade_type': $('.trade_window .status_' + i).text().trim(),
'trade_start_price': '1.1234',
'trade_open_time': '18:21:02'
}),
type: 'GET',
success: function (result) {
if(result.trim() === "false") {
console.log("RESULT IS " + result.trim());
} else {
$('.trade_window #market_1').html(result);
setTimeout(function () {
// This is to make it a little more visible
console.log(" ");
console.log(" ");
console.log("PAUSE!!!!");
console.log(" ");
console.log(" ");
}, 5000);
}
}
});
};
}, 2000));
});
那么,在应用程序中发生的事情是这些中有6个元素(div)我们有几条信息,如果它们不同则将这些信息与数据库上的数据进行比较,然后需要显示数据库信息
现在上面的脚本检查每个元素然后更新是否需要,问题是ajax调用是在后台完成的,所有其他的东西都在我们等待ajax调用完成时执行,所以完成for循环的时间结束时,即使元素1,2,3,4或5发生变化,也只会更新元素6。
我该怎么做才能改变这个?是否有一个js / jquery方法可用于检查php文件是否已完成加载?
感谢您的时间。
答案 0 :(得分:0)
收集$.ajax
来电的延期(承诺)返回值:
var def = [];
for (var i = 1; i < 6; ++i) {
def[i - 1] = $.ajax({ ... });
}
然后在循环之外使用$.when()
等待它们全部完成:
$.when.apply($, def).done(function(r1, r2, r3, ...) {
...
});