2 개 (또는 그 이상)의 ajax 호출을 동시에 수행하려고합니다. jQuery를 사용하고 싶지는 않지만 순수한 JavaScript 만 사용하고 싶습니다.동시적인 ajax 호출
대부분의 경우 작동합니다. data1은 sample.com/ajax1에서 데이터를 출력하고 data2는 sample.com/ajax2에서 데이터를 출력하지만 두 번째 AJAX 호출에서 첫 번째 결과를 표시하는 경우가 있습니다 (1에서 10까지).
왜 이런 일이 발생합니까? 두 AJAX 요청 모두 동일한 도메인의 데이터를 요청하지만 다른 URL을 사용합니다. 이 문제를 방지하는 방법이 있습니까? 여기
스크립트입니다 : 모든// First AJAX
var xmlhttp1;
// Second AJAX
var xmlhttp2;
if (window.XMLHttpRequest) {
xmlhttp1 = new XMLHttpRequest();
} else {
xmlhttp1 = new ActiveXObject("Microsoft.XMLHTTP");
}
xmlhttp1.onreadystatechange = function() {
if (xmlhttp1.readyState == 4 && xmlhttp1.status == 200) {
data = JSON.parse(xmlhttp1.responseText);
console.log('data1: ' + data);
}
}
xmlhttp1.open("GET", "http://sample.com/ajax1", true);
xmlhttp1.send();
if (window.XMLHttpRequest) {
xmlhttp2 = new XMLHttpRequest();
} else {
xmlhttp2 = new ActiveXObject("Microsoft.XMLHTTP");
}
xmlhttp2.onreadystatechange = function() {
if (xmlhttp2.readyState == 4 && xmlhttp2.status == 200) {
data = JSON.parse(xmlhttp2.responseText);
console.log('data2: ' + data);
}
}
xmlhttp2.open("GET", "http://sample.com/ajax2", true);
xmlhttp2.send();
_ "하지만 때로는 (1에서 10까지) 두 번째 AJAX 호출은 첫 번째 호출의 결과를 표시합니다."_ 왜냐하면 비동기식이기 때문입니다. 두 번째 AJAX 호출이 두 번째 호출이 반환되기 전에 반환되기 전에 하나의 AJAX 호출이 전송된다는 보장은 없습니다. – j08691
"var data"는 문제입니다 .... – cocco
두 변수가 모두 같은 변수를 공유하기 때문에'data' 대신'data1'과'data2'를 사용해보십시오. – Pete