Версия для печати темы
Нажмите сюда для просмотра этой темы в оригинальном формате
Форум программистов > JavaScript: Общие вопросы > FF: "Component returned failure code: 0x80040111"в


Автор: Royan 18.2.2008, 16:37
Я знаю, что тема поднималась, но вопрос все-таки остался. Вопрос в том, выяснил ли все-таки кто-нибудь что это за баг, почему он происходит время от времени и как с ним бороться кроме как делать синхронный запрос?

Я так понял что баг не проявляется в следующей ситуации:

Код

xmlHttp.onreadystatechange=function() {
if(xmlHttp.readyState==4)  {
     // code
  }
}


И проявляется в 

Код

xmlHttp.onreadystatechange=function() {
if(xmlHttp.readyState==4)  {
     if(xmlHttp.status!=200)  {
        //code
     } 
  }
}


То есть когда читается поле status. Почему я так уверен? Потому что в моем случае баг появляется как раз на строчке, где идет чтение из поля статус.

Хотел бы выслушать мнения, заранее благодарю.

Автор: Sardar 18.2.2008, 20:52
Возможно из-за опечатки xmlHttp, возможно ислючение, что там подымается так оригинально ловиться лисой из обработчика onreadystatechange.

Автор: Royan 19.2.2008, 13:02
Sardar, 
Это действительно опечатка. Но ты же сам выдвигал идеи в свое время по этому поводу: http://forum.vingrad.ru/index.php?showtopic=147081&view=findpost&p=1122100

Короче суть в том, что даже в случае асинхронного режима объект xmlHttp сохраняется где-то в недрах браузера иначе невозможно было бы проверить даже "readyState". Суть в том, что проблема выскакивает только при чтении поля статус

Автор: Sardar 19.2.2008, 13:58
Так, согласно http://www.w3.org/TR/XMLHttpRequest/#status, браузер обязан поднять INVALID_STATE_ERR если статус-код не был получен (оборвали соединение, совсем галимый ответ от сервера и т.п.). Мозилла действительно точно следует этому предписанию и кидает NS_ERROR_NOT_AVAILABLE (0х80040111).

Вывод: всегда нужно оборачивать обращение к .status (и не только) в try/catch блок. По исключению можно понять:
  • юзер остановил запрос
  • сервер не доступен/не найден
  • сервер не отослал валидный HTTP ответ (закрыл соединение без ответа, отослал лажу и т.п.)
  • старница начала перезагружаться раньше, чем ajax запрос успел прийти, т.е. запрос автоматически убивается с выходом .readyState=4 (к примеру запрос и сразу submit формы. не используй input:submit!)
  • и ещё тонна различных ситуаций

При исключении считаем что запрос не успел дойти до сервера, тихо материмся и донимаем пользователя алертами smile

Чтиво: http://www.w3.org/TR/XMLHttpRequest/, http://helpful.knobs-dials.com/index.php/%22Component_returned_failure_code:_0x80040111_(NS_ERROR_NOT_AVAILABLE)%22, http://matthom.com/archive/2006/05/15/scary-ajax-error.

Автор: Royan 19.2.2008, 16:46
Ясно спасибо!

Powered by Invision Power Board (http://www.invisionboard.com)
© Invision Power Services (http://www.invisionpower.com)