0

我目前正在使用 JavaScript / jQuery 编写脚本来计算统计数据。所以它要求做很多 HTTP 请求,解析 DOM 和修改变量值。我遇到了一些错误,我担心 AJAX 请求是异步的,这就是原因。

例如,假设我想在 StackOverflow 上浏览很多问题,并评估一个成员出现了多少次。

我将编写如下代码:

var users = {};
var checked_pages = 0;

function get_users(num_question) {
    $.ajax({
        url: "http://www.stackoverflow.com/questions/" + parseInt(num_question), // I Know that sometimes, the question is removed or the url redirects to an answer, but it does not matter, it is not the issue.
        type: "GET",
        success: function(data) {
            var users_in_page = $(".user-details > a").map(function() { return $(this).text(); }).get(); // Users who appear in the page.
            for (var i = 0; i < users_in_page.length; i++) {
                if (isNaN(users[users_in_page[i]])) { // The user is not yet in the dictionnary.
                    users[users_in_page[i]] = 1;
                } else {
                    users[users_in_page[i]] += 1;
                }
            }

            checked_pages += 1;

            if (checked_pages == 99) { // Every requests are made.
                alert("END");
                // Do something with my dictionary.
            }
        }
    });
}

for (var i = 1; i < 100; i++) {
    get_users(i);
}

我担心的是,由于所有请求都非常快速地同时发出,计数错误可能会滑倒并导致最终字典变量失真。

这就是为什么在那之前我在我的函数中使用了一个回调,它取代了我的最终循环并确保一切都正确执行。但当然,它要慢得多。

function get_users(num_question) {
    ...

    num_question += 1;
    get_users(num_question);
}

get_users(1);

我的第一个提案,同时带有 AJAX 请求,会引起我担心的问题吗?因为我已经创建了一个这样的脚本,结果很奇怪,我想知道它是否来自那里......如果确实如此,那么是否有办法确保我的变量和字典的完整性,而比我的第二个功能更快地增加请求?

4

0 回答 0