Ajax는 readystate 1을 지나치지 않을 것입니다. 왜?
-
09-09-2019 - |
문제
이 기능을 작동 시키려고 노력하고 있습니다. 매개 변수 요청을합니다. url
그런 다음 responsetext를 보냅니다 callback
기능입니다.
그것은 단지 도착하는 것 같습니다 readyState 1
(Firebug 명령에 감사합니다).
여기있어:
function Request(url, callback){
if (window.XMLHttpRequest) { // Mozilla, Safari, ...
httpRequest = new XMLHttpRequest();
} else if (window.ActiveXObject) { // IE
httpRequest = new ActiveXObject("Microsoft.XMLHTTP");
} else{
return false;
}
httpRequest.onreadystatechange = function(){
console.log(httpRequest.readyState);
if (httpRequest.readyState == 4) {
callback(httpRequest.responseText);
}
};
console.log(httpRequest, url);
httpRequest.open('GET', url, true);
httpRequest.send(null);
}
해결책
이 문제가 on readeptatechange 대신 onload 이벤트를 할당하는 문제를 해결했습니다.
function Request(url, callback){
if (window.XMLHttpRequest) { // Mozilla, Safari, ...
httpRequest = new XMLHttpRequest();
} else if (window.ActiveXObject) { // IE
httpRequest = new ActiveXObject("Microsoft.XMLHTTP");
} else{
return false;
}
var readyStateChange = function(){
console.log(httpRequest.readyState);
if (httpRequest.readyState == 4) {
callback(httpRequest.responseText);
}
};
if (isFirefox && firefoxVersion > 3) {
httpRequest.onload = readyStateChange;
} else {
httpRequest.onreadystatechange = readyStateChange;
}
console.log(httpRequest, url);
httpRequest.open('GET', url, true);
httpRequest.send(null);
}
다른 팁
해당 URL이 브라우저에서 직접 방문하여 실제로 응답하는지 확인하십시오.
다른 브라우저로 테스트하면 동일한 결과가 나타납니다.
일부 형태의 HTTP 모니터를 사용하여 클라이언트가 서버 대화를 볼 수 있습니다 (내가 가장 좋아하는 것은 바이올리니스트)
아마도 AJAX 요청은 데이터를 반환하지 않을 수 있습니다 (따라서 어떤 종류의 서버 측 오류). Firebug 콘솔에서 'xmlhttprequests 표시'옵션을 활성화하여 확인하십시오.
나는 또한 같은 문제에 직면했다. 아래 URL을 읽음으로써 내 것을 해결했습니다.
http://bytes.com/topic/javaScript/answers/548442-ajax-readystate-1-wall
기본적으로 httprequest의 이벤트 리스너로서 내 함수를 할당 할 때, readreadStateChange는 변수를 전달할 수 없습니다. HTTP Post 문자열 내부에 변수를 서버 백엔드에 포함시켜야합니다.
FF 3에 적합합니다. jQuery를 사용할 필요가 없습니다.
나는 Firefox에서도 같은 문제가 있었지만 Chrome에서는 그렇지 않았습니다.
문제는 내 응답이 MIME 타입이 "Application/Octet-stream"으로 설정했다는 것입니다.
"Text/HTML"으로 변경하면 Firefox에서도 작동했습니다.