2011-09-02 14 views
12

me encontré con este error sólo en IE9:IE 9 error de Javascript c00c023f

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

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

no puedo averiguarlo por qué sucedió esto, y parece que funciona muy bien en otros navegadores. está siendo abortado

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=/'; 
    } 

} 

Respuesta

18

No creo que su solicitud:

y este es mi código JavaScript? Una búsqueda rápida en Google encontró this publicación en el blog. Parece que una solicitud abortada en IE9 dará este error cuando intente leer cualquier propiedad fuera del objeto XMLHttpRequest.

Desde el puesto, su problema particular con este código de error podría ser duplicado por:

  • Crear un objeto XMLHttpRequest
  • Asignar un evento onreadystatechanged manejador
  • ejecutar una solicitud
  • Abortar la solicitud antes de que se haya manejado la respuesta

Ahora verá que se llamará al controlador readystatechange, con la propiedad readystate establecida en '4'. Cualquier intento de leer las propiedades del objeto XmlHttpRequest fallará.

El autor mitiga este problema asignando un estado abortar a la solicitud 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 el this WebSync Google Groups post. Hacia el final de la discusión hay una implicación de que este problema sólo se produce

si tienes las normas e IE9 representación modos ambos conjuntos

esperanza que apunta en la dirección correcta.

+0

Hola @Matt, ¡probé tus soluciones y funciona! Muchas gracias, quería darle un voto, pero soy nuevo aquí, tengo que esperar a la reputación 15. ¡Tengo que trabajar duro! Jaja. ¡Gracias de nuevo! – peipei

+0

@peipei Me alegra que funcionó. ¡Y bienvenido a StackOverflow! – Matt

2

Cambiar el

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

a

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

Como las cuestiones de orden. parece que en IE9 si el estado no es 4, el responseXML y el texto de respuesta producen este error si se accede (no tengo ni idea de por qué ...)

+0

Esta es la respuesta correcta. – Knu

3

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

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

Hemos encontrado que esta sea la resolución más exitosa de lo anterior.

+0

Esto funcionó para mi caso ... Problema muy extraño, me alegro de que pueda resolverse así y evaluar la respuesta. – afreeland

1

Recibo este error en mi Framework. Solo aparece en IE (ve figura). Simplemente envuelto la respuesta, como a continuación:

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

Sucede para mí con IE9 cuando leí la propiedad "status" prematuramente (antes de readyState es 4/DONE).

Cuestiones relacionadas