我目前正在使用 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 请求,会引起我担心的问题吗?因为我已经创建了一个这样的脚本,结果很奇怪,我想知道它是否来自那里......如果确实如此,那么是否有办法确保我的变量和字典的完整性,而比我的第二个功能更快地增加请求?