IE 9 Ошибка Javascript c00c023f
Я наткнулся на эту ошибку только на IE9:
SCRIPT575: Не удалось выполнить операцию из-за ошибки c00c023f.
Ошибка в этой строке: if ((a.responseXML) && (a.readyState==4)) {
Я не могу понять, почему это произошло, и, похоже, это работает очень хорошо в других браузерах.
и это мой код 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=/';
}
}
Ответы
Ответ 1
Я не предполагаю, что ваш запрос прерывается? Быстрый googling нашел это сообщение в блоге. Казалось бы, прерванный запрос в IE9 даст эту ошибку при попытке прочитать любые свойства объекта XMLHttpRequest.
Из сообщения, их конкретная проблема с этим кодом ошибки может быть дублирована:
- Создать объект XMLHttpRequest
- Назначить обработчик события onreadystatechanged
- Выполнить запрос
- Отменить запрос до того, как был обработан ответ
Теперь вы увидите, что обработчик readystatechange будет вызван, с свойством readistate, равным '4'. Любая попытка прочитать Свойства объекта XmlHttpRequest не будут выполнены.
Автор смягчает эту проблему, назначая условие прерывания запросу, когда выполняется ручное прерывание, и обнаруживает его и возвращается, прежде чем пытаться прочитать какие-либо другие свойства. Хотя этот подход будет действительно работать, только если вы выполняете отмену самостоятельно.
Аналогичная проблема была зафиксирована на этой странице в разделе "Группы Google" . К концу обсуждения подразумевается, что эта проблема возникает только
если у вас есть стандарты и рендеринг IE9 режимы, установленные как
Надеюсь, что вы укажете в правильном направлении.
Ответ 2
В рамках процедуры readyState == 4 включите попытку и уловить, похожее на:
try {
var response=xmlHttp.responseText;
}
catch(e) {
var response="Aborted";
}
Мы обнаружили, что это самое успешное решение вышеупомянутого.
Ответ 3
Переключите
if ((a.responseXML) && (a.readyState==4))
к
if ((a.readyState==4) && (a.responseXML))
Как это имеет значение. кажется, что на IE9, если состояние не 4, responseXML и reponseText дают эту ошибку при доступе (я не знаю, почему...)
Ответ 4
Я получал эту ошибку в своей Framework. Он отображается только в IE (go figure). Я просто завернул ответ, как показано ниже:
if(request.readyState == 4)
{
// get response
var response = request.responseText;
}
Ответ 5
Это происходит для меня с IE9, когда я преждевременно прочитал свойство "status" (до того, как readyState будет 4/DONE).