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