IE 가이 Alert ()를 표시하지 않는 이유는 무엇입니까?
-
20-09-2019 - |
문제
다음 코드가 있습니다.
// setup the AJAX request
var pageRequest = false;
if(window.XMLHttpRequest) pageRequest = new XMLHttpRequest();
else if(window.ActiveXObject) pageRequest = new ActiveXObject("Microsoft.XMLHTTP");
// callback
pageRequest.onreadystatechange = function() {
alert('pageRequest.readyState: ' + pageRequest.readyState
+ '\npageRequest.status: ' + pageRequest.status);
}
pageRequest.open('POST','ajax.php',true);
// q_str contains something like 'data=value...'
pageRequest.setRequestHeader("Content-type", "application/x-www-form-urlencoded");
pageRequest.setRequestHeader("Content-length", q_str.length);
pageRequest.setRequestHeader("Connection", "close");
pageRequest.send(q_str);
이것은 크롬에서 잘 작동하지만 즉, "불특정 오류"를 뱉어 내면서 질식합니다. 그리고 그것은 alert ()가있는 선을 가리 킵니다. 왜 경고를 표시 할 수 없습니까?
편집 : 알겠습니다. 오류 대화 상자를 기각 한 후 예상대로 세 가지 알림을 얻습니다 ....
편집 : 이제 정말 이상해지고 있습니다. 내가 변하면
alert('pageRequest.readyState: ' + pageRequest.readyState
+ '\npageRequest.status: ' + pageRequest.status);
에게
alert('pageRequest.readyState: ' + pageRequest.readyState);
그런 다음 작동하고 5 개의 알림을 얻습니다. (1,1,2,3,4)
해결책
상태는 HTTP 응답입니다. 메소드가 처음 두 번이라고 불립니다. readystate 1을 의미합니다 "개체가 생성되었지만 보내기 방법은 호출되지 않았습니다.". 당시 서버로부터의 상태 응답은 요청을받지 못하므로 경고에 상태를 사용하면 오류가 발생했습니다.
다른 팁
Chrome 4도 오류를 제기합니다 (invalid_state_err : dom Exception 11). Chrome JavaScript 콘솔을 열면 오류가 표시됩니다.
Firefox 3.6도 오류를 제기하지만 조용히 버리는 것 같습니다 (오류 콘솔에서는 보이지 않습니다). 기능을 a로 랩핑하는 경우 try..catch
블록 오류 메시지가 표시됩니다 (구성 요소 반환 실패 코드 : 0x80040111 (NS_ERROR_NOT_AVAILABLE)) :
pageRequest.onreadystatechange = function() {
try {
alert('pageRequest.readyState: ' + pageRequest.readyState
+ '\npageRequest.status: ' + pageRequest.status);
}
catch (e) {
alert(e);
}
}
처음 두 번 onreadystatechange
Internet Explorer에서 호출됩니다. readyState
1 (열린)입니다. 이 상태에서는 요청이 전송되고 있지만 아직 응답은받지 못했습니다. 호출 할 때 오류가 발생합니다 status
이것의 속성 readyState
상태를 읽을 수있는 HTTP 응답이 없기 때문입니다.
이 동작은 이전 버전의 The와 호환됩니다 W3C XMLHTTPREQUEST 사양, 어떤 주:
만약
status
속성을 사용할 수 없습니다. 예외를 제기해야합니다. 언제 사용할 수 있어야합니다readyState
3 (수신) 또는 4 (로드)입니다. 사용 가능한 경우 HTTP 상태 코드를 나타내야합니다 (일반적으로 성공적인 연결을 위해 200).검색에 대한 예외
쌍 탁사
INVALID_STATE_ERR
ReadyState에 부적절한 값이있는 경우이 속성에 액세스 할 경우 올라 가야합니다.
최신 버전 그러나 사양 중에서도 말합니다 status
항상 값을 반환해야합니다.
그만큼
status
속성은 다음 단계를 실행 한 결과를 반환해야합니다.
- 상태가 무단 또는 열린 반품 0 이고이 단계를 종료 한 경우.
- 오류 플래그가 true 0 인 경우 0을 반환 하고이 단계를 종료하십시오.
- HTTP 상태 코드를 반환하십시오.
Pagerequest.status (정수)를 평가할 때 문자열 연결 문제가 있다고 생각합니다. 이걸 시도해보십시오.
status = pageRequest.status;
status += '';
alert('pageRequest.readyState: ' + pageRequest.readyState \
+ '\npageRequest.status: ' + status);