2015-02-06 7 views
0

취소됩니다 나는 다음과 같은 문제가 있습니다
내가 아약스 simulateously almosts를 요청 두를 보내려고 해요 :
은 다음

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(); 

그런 다음 각 콜백 연료 소모량이 전송 된 특정 요청을 참조하는 폐쇄 될 것입니다.

+0

예 잘못 입력했는데 이제 작동합니다. 하지만 문제를 단순화했는데, 내 진짜 문제는 내부에 xhr 요청을하는 메소드가 있고, var xhr을 사용하고 있지만 하나만 실행된다는 것입니다. 무슨 문제가있을 수 있니? –

+0

URL 매개 변수가 동일합니까? 캐시 버스터를 추가하여 캐시가 사용되지 않도록하십시오. – Barmar

관련 문제