문제

다음 코드가 있습니다.

// 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 속성은 다음 단계를 실행 한 결과를 반환해야합니다.

  1. 상태가 무단 또는 열린 반품 0 이고이 단계를 종료 한 경우.
  2. 오류 플래그가 true 0 인 경우 0을 반환 하고이 단계를 종료하십시오.
  3. HTTP 상태 코드를 반환하십시오.

Pagerequest.status (정수)를 평가할 때 문자열 연결 문제가 있다고 생각합니다. 이걸 시도해보십시오.

status = pageRequest.status;
status += '';
alert('pageRequest.readyState: ' + pageRequest.readyState \
+ '\npageRequest.status: ' + status);
라이센스 : CC-BY-SA ~와 함께 속성
제휴하지 않습니다 StackOverflow
scroll top