2011-09-02 13 views
12

mi sono imbattuto in questo errore solo su IE9:IE 9 errore Javascript c00c023f

SCRIPT575: Impossibile completare l'operazione a causa di errore c00c023f.

L'errore è accaduto su questa linea: if ((a.responseXML) && (a.readyState==4)) {

Non posso capirlo perché questo è accaduto, e sembra funzionare molto bene in altri browser.

e questo è il mio codice 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=/'; 
    } 

} 

risposta

18

Non credo che la tua richiesta sta per essere interrotta? Un rapido googling trovato post sul blog this. Sembrerebbe che una richiesta abortita in IE9 darà questo errore quando si tenta di leggere qualsiasi proprietà al di fuori dell'oggetto XMLHttpRequest.

Dalla posta, la loro particolare problema con questo codice di errore potrebbe essere ripetuto da:

  • Creare un oggetto XMLHttpRequest
  • Assegnare un evento onreadystatechanged gestore
  • eseguire una richiesta
  • Abort la richiesta prima che la risposta sia stata gestita

Ora vedrete che il gestore di readystatechange sarà chiamato, con la proprietà readystate impostata su '4'. Qualsiasi tentativo di leggere le proprietà dell'oggetto XmlHttpRequest avrà esito negativo.

L'autore attenua questo problema assegnando uno stato di interruzione alla richiesta quando si esegue l'annullamento manuale, rilevandolo e ritornando prima di provare a leggere altre proprietà. Anche se questo approccio funzionerebbe davvero solo se stai eseguendo l'aborto te stesso.

Un problema simile è stato documentato su this WebSync Google Groups post. Verso la fine della discussione v'è un'implicazione che questo problema si verifica solo

se hai gli standard e IE9 rendendo modalità sia impostato

speranza che si punta nella direzione giusta.

+0

Ciao @Matt, ho provato le tue soluzioni e funziona! Grazie mille, volevo darti un voto, ma sono nuovo qui, devo aspettare per la reputazione 15. Devo lavorare sodo! Haha. Grazie ancora! – peipei

+0

@peipei Sono contento che abbia funzionato. E benvenuto su StackOverflow! – Matt

2

Accendere il

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

a

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

Come le questioni di ordine. sembra che su IE9 se lo stato non è 4, responseXML e reponseText restituiscono questo errore se vi si accede (non ho idea del perchè ...)

+0

Questa è la risposta giusta. – Knu

3

All'interno del readyState == 4 di routine, includono un cercare di catturare simile a:

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

abbiamo scoperto che questa sia la risoluzione di maggior successo a quanto sopra.

+0

Questo ha funzionato per il mio caso ... Problema molto strano, felice di poter essere risolto in questo modo e di valutare la risposta. – afreeland

1

Stavo ricevendo questo errore nel mio Framework. Si presenta solo in IE (vai alla figura). Ho semplicemente avvolto la risposta come qui di seguito:

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

Succede per me con IE9 quando ho letto la proprietà "stato" prematuramente (prima readyState è 4/DONE).

Problemi correlati