-2

我有一个应用程序可以连续运行并在需要时自行更新。它使用 ajax 调用一个 php 文件,该文件将检查数据库中的一些数据,如果它已更改,则我们更新屏幕。php 似乎工作得很好,它是我遇到问题的 js。

$(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&param=' + 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),我们有一些信息,如果它们不同,则将它们与 DB 上的数据进行比较,然后需要显示 DB 信息。

现在上面的脚本检查每个元素,然后在需要时更新,问题是 ajax 调用是在后台完成的,而所有其他的东西都是在我们等待 ajax 调用完成时执行的,所以到他们的时候已完成 for 循环在末尾,因此即使元素 1、2、3、4 或 5 发生更改,也只会更新元素 6。

我能做些什么来改变这个?是否有可用于检查 php 文件是否已完成加载的 js/jquery 方法?

谢谢你的时间。

4

1 回答 1

0

收集$.ajax调用的延迟(承诺)返回值:

var def = [];

for (var i = 1; i < 6; ++i) {
    def[i - 1] = $.ajax({ ... });
}

然后在循环外使用$.when()等待它们全部完成:

$.when.apply($, def).done(function(r1, r2, r3, ...) {
    ...
});
于 2013-05-07T13:52:36.427 回答