繁体   English   中英

同时触发的多个ajax调用无法正常工作

[英]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。 如果我改变呼叫的频率,比如20001900 ,那么一切正常,我几乎没有NaN结果。 当这些频率相同时,其中一个呼叫的NaN结果超过80%。 似乎浏览器无法处理同时调用的两个请求。 我只使用那两个工作者,因此浏览器不应该被AJAX请求重载。 问题出在哪儿?

请注意, aaa.php与mySql数据库一起使用,并根据url中的参数进行一些简单的查询。

您只需要$ .each$ .ajax的两个参数形式

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.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM