我创建了一个网站,它通过AJAX从多个来源加载每隔几秒钟的数据。但是我遇到了一些奇怪的行为。这是代码:
function worker1() {
var currentUrl = 'aaa.php?var=1';
$.ajax({
cache: false,
url: currentUrl,
success: function(data) {
alert(data)
},
complete: function() {
setTimeout(worker1, 2000);
}
});
}
function worker2() {
var currentUrl = 'aaa.php?var=2';
$.ajax({
cache: false,
url: currentUrl,
success: function(data) {
alert(data)
},
complete: function() {
setTimeout(worker2, 2000);
}
});
}
问题在于,很多时候,其中一名工人返回NaN。如果我更改了呼叫的频率,比如2000
和1900
,那么一切正常,我几乎没有NaN
个结果。当这些频率相同时,其中一个呼叫的NaN
结果超过80%。似乎浏览器无法处理同时调用的两个请求。我只使用这两个工作者,因此浏览器不应该被AJAX请求重载。问题在哪里?
请注意aaa.php
适用于mySql数据库,并根据url中的参数进行一些简单的查询。
答案 0 :(得分:1)
var urls = ['/url/one','/url/two', ....];
$.each(urls, function(i,u){
$.ajax(u,
{ type: 'POST',
data: {
answer_service: answer,
expertise_service: expertise,
email_service: email,
},
success: function (data) {
$(".anydivclass").text(data);
}
}
);
});
注意:成功回调生成的消息将覆盖 彼此如图所示。你可能想要使用 成功函数中的$(' #divid')。append()或类似内容。
答案 1 :(得分:0)
也许,不要使用这些工作人员而是使用承诺而不是像下面那样?虽然没有查看服务器代码,但无法说明返回的错误。下面是您正在尝试做的工作代码。
这是一个简单的示例,但您可以为每个URL使用不同的解析器和一个对象({url:resolverFunc}),然后使用Object.keys进行迭代。
var urls = [
'http://jsonplaceholder.typicode.com/users/1',
'http://jsonplaceholder.typicode.com/users/2',
'http://jsonplaceholder.typicode.com/users/3',
'http://jsonplaceholder.typicode.com/users/4',
'http://jsonplaceholder.typicode.com/users/5',
'http://jsonplaceholder.typicode.com/users/6',
'http://jsonplaceholder.typicode.com/users/7'
]
function multiGet(arr) {
var promises = [];
for (var i = 0, len = arr.length; i < len; i++) {
promises.push($.get(arr[i])
.then(function(res) {
// Do something with each response
console.log(res);
})
);
}
return $.when(promises);
}
multiGet(urls);
<script src="https://ajax.googleapis.com/ajax/libs/jquery/2.1.1/jquery.min.js"></script>