2015-02-06 46 views
0

取消我有以下问题:
我试图发送两个AJAX请求almosts simulateously:
在速度较慢的网络前面的Ajax请求被通过后续

function ajax() 
{ 
    xhr = new XMLHttpRequest(); 
    xhr.onreadystatechange = function() 
    { 
     if(xhr.readyState == 4) 
     console.log(xhr.responseText); 
    } 
    xhr.open('GET', 'list.html', true); 
    xhr.send(''); 
} 
ajax(); 
ajax(); 

的问题是,只是其中之一成功。
如果我尝试DevTools我自己,如果网络速度很高,它们会同时执行(当我在控制台中快速键入ajax()函数两次时),而如果我降低网络速度并再次快速键入它们只有其中一个成功。
这是怎么发生的?我怎样才能避免这种自动取消xhr请求?

回答

2

您应该使用本地变量来保存XMLHttpRequest。由于您使用的是全局变量,因此回调函数始终引用发送的第二个AJAX请求。所以改变:

xhr = new XMLHttpRequest(); 

到:

var xhr = new XMLHttpRequest(); 

然后每个回调funtion将是指发送特定请求关闭。

+0

是的我输错了,现在它工作。但我简化了这个问题,我真正的问题是我有一个内部的对象,其中有一个方法可以在其中创建一个xhr请求,并且我正在使用var xhr,但是我只能执行一个。那里会出现什么问题? – 2015-02-06 23:56:52

+0

URL参数是否相同?尝试添加缓存拦截器,以防止缓存被使用。 – Barmar 2015-02-07 00:00:15