[英]Multiple ajax calls fired simultaneously not working properly
我创建了一个站点,通过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中的参数进行一些简单的查询。
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()或类似的东西。
也许,不要使用这些工人并使用承诺而不是像下面那样? 虽然没有查看服务器代码,但无法说明返回的错误。 下面是您正在尝试做的工作代码。
这是一个简单的示例,但您可以使用对象({url:resolverFunc})为每个URL使用不同的解析器,然后使用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>
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.