다음 이유를 이해하려고합니다.왜 자바 스크립트 비동기 응답이 중복됩니까?
for 루프 내에서 여러 비동기 요청을 시작한 다음 응답을 간단히 인쇄합니다. 여기에 내가 뭘하는지 매우 단순화 된 버전입니다 :
function getStuff(){
var singers = ['marley','matthews','johnson','buffett'];
for(lastname in singers){
var lastName = singers[lastname];
log("Making request for "+ singers[lastname]);
makeAsyncRequest(singers[lastname], function(response){
//this is the callback when the async request returns
log("RESPONSE - "+lastName+": "+response);
});
}
}
나는 syncronously (비동기 : false)를 사용하여 코드를 실행하면, 때마다 예상대로 나는 다음과 같은 결과를 얻을 :
Making request for marley
Making request for matthews
Making request for johnson
Making request for buffett
RESPONSE - marley: bob
RESPONSE - johnson: jack
RESPONSE - matthews: dave
RESPONSE - buffett: jimmy
비동기 적으로 실행되면 다음과 같은 결과가 표시됩니다. 나는 응답이 잘못되어 돌아올 수도 있음을 이해한다. 그러나 내가 이해할 수없는 것은 그들이 순서를 벗어나서 돌아 왔을 때 왜 중복 값을 보았는가하는 것입니다. 예를 들어 다음과 같이 표시 될 수 있습니다.
Making request for marley
Making request for matthews
Making request for johnson
Making request for buffett
RESPONSE - marley: bob
RESPONSE - johnson: dave
RESPONSE - matthews: dave
RESPONSE - buffett: jimmy
알림 'dave'가 두 번 표시되는 것 같습니다.
Making request for marley
Making request for matthews
Making request for johnson
Making request for buffett
RESPONSE - marley: bob
RESPONSE - johnson: dave
RESPONSE - matthews: jack
RESPONSE - buffett: jimmy
그러나 콜백에서 "응답"PARAM가 같은 값으로 설정지고있는 것으로 보인다 왜 이해가 안 : 값 '잭'과 '데이브'전환한다면 나는 그렇게 같이 이해할 수 두번? 나는 여기서 기본적인 것을 간과하고 있는가?
도움 주셔서 감사합니다.
당신이 추가 시도해 볼 수도 있습니다'{캐시 : 거짓}'아약스 요청에
해결책은 루프에 추가로 폐쇄 될 수 있을까? – pimvdb
감사합니다. {cache : false}를 추가했는데 자주 사용하지 않는 것 같았습니다.하지만 브라우저가 어떻게 든 캐시되고 있다고 생각합니까? – Upgradingdave