AJAX调用循环内部。只有一个请求完成

时间:2016-04-19 15:02:12

标签: javascript jquery ajax node.js loops

所以我使用AJAX多次点击一个url,我面临的问题是,即使代码应该完成多个请求,也只有一个AJAX请求被完成。我在终端中运行了以下代码:

var item_arr = ['a','b'];

item_arr.forEach(function(item_name){

$.ajax({url:'https://example.com:port/',
type:'POST',
data:{ 'item':item_name },
    success:function(res){
    console.log(res);
    }
});

});

我基本上想问的是:

  • 这段代码有什么问题吗?
  • 或者对特定网址(只有两个)的并行请求数有限制吗?

另外,我正在使用NODEJS(请求)来构建应用程序,我只是使用jquery来检查它是否在jquery中工作,但这两种技术在这个问题上的表现都相似。

更新: 正如Rion建议的那样,我比较了成功和不成功请求的curl请求。成功点击的标题如下:

'Origin: http://evil.com/'
'Accept-Encoding: gzip, deflate' -H 'Accept-Language: en-US,en;q=0.8'
'User-Agent: Mozilla/5.0 (X11; Linux x86_64) AppleWebKit/537.36 (KHTML, like Gecko) Ubuntu Chromium/49.0.2623.87 Chrome/49.0.2623.87 Safari/537.36'
'Content-Type: application/x-www-form-urlencoded'
'Accept: */*'
'Referer: http://stackoverflow.com/questions/33243685/nodejs-a-better-way-to-handle-ajax-request-to-the-server'
'Connection: keep-alive'

而对于不成功的请求,则有以下标题:

'Accept: */*' 
'Referer: http://stackoverflow.com/questions/33243685/nodejs-a-better-way-to-handle-ajax-request-to-the-server'
'Origin: http://stackoverflow.com'
'User-Agent: Mozilla/5.0 (X11; Linux x86_64) AppleWebKit/537.36 (KHTML, like Gecko) Ubuntu Chromium/49.0.2623.87 Chrome/49.0.2623.87 Safari/537.36'
'Content-Type: application/x-www-form-urlencoded'

Accept-Encoding会有什么不同吗?

1 个答案:

答案 0 :(得分:0)

  

此代码有什么问题吗?

您的实际代码似乎没有任何问题作为一个示例,可以在this example fiddle中看到同样的事情,并且工作得很好:

// Define your values
var item_arr = ['a','b'];

$(function(){
    // Loop through them
    item_arr.forEach(function(item_name){
      // Post each one (JSFiddle URL for example purposes)
      $.post('/echo/html/', { 'item':item_name }, function(){
        alert(item_name);
      });
    });
});

如果这不起作用,那么我倾向于相信您要发布到的URL出现问题(即可能结果未成功返回)。

  

或者对特定请求的并行请求数量是否有限制   url(只有两个)?

这可能会有所不同,因为某些浏览器/网络服务器可能会限制来自同一主机名的并发连接数,但是如果您使用的数量很少,这应该不是问题。您可以通过以下方式显式禁用AJAX调用的缓存来检查是否存在可能的缓存问题:

cache: false

您可能需要考虑在浏览器中使用开发人员工具(F12)来查看每个请求/响应的外观,以确保它们正常工作:

enter image description here