Pregunta

Tengo el siguiente fragmento de código:

// 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);

Esto funciona bien en Chrome, pero IE ahoga en él, escupiendo un "error no especificado." y apunta a la línea con la alerta () en ella. Por qué no puede mostrar la alerta?

Edit: Bueno, después de cerrar el diálogo de error, consigo las tres alertas como se esperaba ....

Edit: Ahora que es realmente raro conseguir. Si cambio

alert('pageRequest.readyState: ' + pageRequest.readyState
        + '\npageRequest.status: ' + pageRequest.status);

a

alert('pageRequest.readyState: ' + pageRequest.readyState);

entonces funciona y me da 5 alertas. (1,1,2,3,4)

¿Fue útil?

Solución

Estado es la respuesta HTTP las dos primeras veces se llama al método que vuelvas 1 y 1 como el readyState. readyState 1 significa "El objeto se ha creado, pero el envío método no ha sido llamado. ". En ese momento no hay respuesta de estado del servidor, ya que no ha recibido ninguna solicitud por lo tanto, el uso de estado en su alerta que dio un error.

Otros consejos

Chrome 4 genera un error demasiado (INVALID_STATE_ERR: DOM Excepción 11). Usted verá el error si se abre la consola de Javascript Chrome.

Firefox 3.6 también genera un error, pero parece desprenderse que en silencio (no es visible en la Consola de errores). Si se coloca la función en un bloque try..catch verá el mensaje de error (Componente devolvió el código de error: 0x80040111 (NS_ERROR_NOT_AVAILABLE)):

pageRequest.onreadystatechange = function() {
  try {
    alert('pageRequest.readyState: ' + pageRequest.readyState
          + '\npageRequest.status: ' + pageRequest.status);
  }
  catch (e) { 
    alert(e); 
  }
}

El primero dos veces onreadystatechange se invoca en Internet Explorer, readyState se 1 (abierto). En este estado, la solicitud se envía, pero la respuesta aún no se ha recibido. se eleva el error cuando se llama a la propiedad status en este readyState porque no hay una respuesta HTTP para leer el estado de.

Este comportamiento es compatible con las versiones anteriores de la W3C XMLHttpRequest especificación , que estado:

  

Si el atributo no es status   disposición que deberá elevar una excepción.   Debe estar disponible cuando readyState   se 3 (Recibir) o 4 (cargado). Cuando   disponible, se debe representar la HTTP   código de estado (típicamente 200 para una   conexión con éxito).

     

Excepciones en la recuperación

     

INVALID_STATE_ERR DOMException debe elevarse si se accede a este atributo   cuando readyState tiene un valor apropiado.

Las versiones más recientes de la especificación, sin embargo, el estado que status siempre debe devolver un valor:

  

El atributo debe devolver el status   resultado de ejecutar estos pasos:

     
      
  1. Si el estado es ENVIADO o abierto de retorno 0 y terminar estos pasos.
  2.   
  3. Si el indicador de error es verdadero retorno 0 y terminar estos pasos.
  4.   
  5. Vuelta el código de estado HTTP.
  6.   

Creo que tienes un problema de concatenación de cadenas, al evaluar PageRequest.status (que es un entero). Intenta esto:

status = pageRequest.status;
status += '';
alert('pageRequest.readyState: ' + pageRequest.readyState \
+ '\npageRequest.status: ' + status);
Licenciado bajo: CC-BY-SA con atribución
No afiliado a StackOverflow
scroll top