IE 9 Error de Javascript c00c023f

Encontré este error solo en IE9:

SCRIPT575: No se pudo completar la operación debido al error c00c023f.

El error ocurrió en esta línea: if ((a.responseXML) && (a.readyState==4)) {

No puedo entender por qué sucedió esto, y parece funcionar muy bien en otros browseres.

y este es mi código javascript:

 var a = new XMLHttpRequest(); a.open("GET",'/cust/ajax/getresult.php?qk=nnf87&arg1='+pzid,true); a.onreadystatechange = function () { if ((a.responseXML) && (a.readyState==4)) { var N = a.responseXML.getElementsByTagName('result') sequence = N[0].firstChild.data; var SEQ = sequence.split(","); var num = SEQ.length; var sum = 0; for(var n=0;n<num;n++){sum = sum + (SEQ[n]*1);} //document.getElementById("the_number_of").innerHTML = sum; var date = new Date(); date.setTime(date.getTime()+(2*60*60*1000)); document.cookie='cpa_num='+sum+'; expires= '+date.toGMTString()+'; path=/'; } } 

Supongo que su request no se cancela. Una búsqueda rápida en Google encontró esta publicación en el blog. Parece que una request abortada en IE9 dará este error cuando intente leer cualquier propiedad fuera del object XMLHttpRequest.

Desde la publicación, su problema particular con este código de error podría ser duplicado por:

  • Crear un object XMLHttpRequest
  • Asignar un controller de events onreadystatechanged
  • Ejecuta una request
  • Abortar la request antes de que la respuesta haya sido manejada

Ahora verá que se llamará al controller readystatechange, con la propiedad readystate establecida en '4'. Cualquier bash de leer las properties del object XmlHttpRequest fallará.

El autor mitiga este problema asignando un estado de aborto a la request cuando se realiza el aborto manual, y lo detecta y lo devuelve antes de intentar leer cualquier otra propiedad. Aunque este enfoque solo funcionaría realmente si realiza el aborto usted mismo.

Se documentó un problema similar en esta publicación de Grupos de Google de WebSync . Hacia el final de la discusión hay una implicación de que este problema solo ocurre

si tienes los estándares y los modos de renderizado IE9 ambos configurados

Espero que te señale en la dirección correcta.

Dentro de la rutina readyState == 4, incluye un try y catch similar a:

 try { var response=xmlHttp.responseText; } catch(e) { var response="Aborted"; } 

Descubrimos que esta es la resolución más exitosa de la anterior.

Cambiar el

 if ((a.responseXML) && (a.readyState==4)) 

a

 if ((a.readyState==4) && (a.responseXML)) 

Como el order importa parece que en IE9 si el estado no es 4, el responseXML y el text de respuesta producen este error si se accede (no tengo ni idea de por qué …)

Estaba obteniendo este error en mi Framework. Solo aparece en IE (ve figura). Simplemente envolví la respuesta como a continuación:

 if(request.readyState == 4) { // get response var response = request.responseText; } 

Me sucede con IE9 cuando leo la propiedad "estado" prematuramente (antes de que readyState sea 4 / DONE).