Warning: Cannot use a scalar value as an array in /home/admin/public_html/forum/include/fm.class.php on line 757

Warning: Invalid argument supplied for foreach() in /home/admin/public_html/forum/include/fm.class.php on line 770
Форумы портала PHP.SU :: Версия для печати :: Exception.Component returned failure code: 0x80040111
Форумы портала PHP.SU » Клиентская разработка » JavaScript & VBScript » Exception.Component returned failure code: 0x80040111

Страниц (1): [1]
 

1. Champion - 10 Сентября, 2008 - 11:19:24 - перейти к сообщению
Все привет! Подскажите пожалуйста, как бороться с такой ошибой:
[Exception... "Component returned failure code: 0x80040111 (NS_ERROR_NOT_AVAILABLE) [nsIXMLHttpRequest.statusText]" nsresult: "0x80040111 (NS_ERROR_NOT_AVAILABLE)" location: "JS frame :: http://localhost/fortests/senddata[dot]html :: anonymous :: line 28" data: no]
Внешне ошибку никак не заметно, но Файрбаг ругается

Возникает она в следующем коде:
CODE (text):
скопировать код в буфер обмена
  1.  
  2. function getXmlHttp(){
  3.   var xmlhttp;
  4.   try {
  5.     xmlhttp = new ActiveXObject("Msxml2.XMLHTTP");
  6.   } catch (e) {
  7.     try {
  8.       xmlhttp = new ActiveXObject("Microsoft.XMLHTTP");
  9.     } catch (E) {
  10.       xmlhttp = false;
  11.     }
  12.   }
  13.   if (!xmlhttp && typeof XMLHttpRequest!='undefined') {
  14.     xmlhttp = new XMLHttpRequest();
  15.   }
  16.   return xmlhttp;
  17. }
  18.  
  19. function call() {
  20.         var req = getXmlHttp()
  21.         req.open('POST', 'rec.php', true);
  22.         req.onreadystatechange = function() {
  23.                 if (req.readyState == 4) {
  24.                         clearTimeout(timepass);
  25.                         document.getElementById('clicks').innerHTML = req.statusText
  26.                         if(req.status == 200) {
  27.                            runs=req.responseText;
  28.                            document.getElementById('clicks').innerHTML =runs;
  29.                         }
  30.                         else
  31.                            document.getElementById('clicks').innerHTML ='Какая-то Ошибка';
  32.                 }
  33.                 else return
  34.     }
  35.         req.send('runs='+runs);
  36.         var timepass = setTimeout(function(){document.getElementById('clicks').innerHTML ='Какая-то Ошибка'; req.abort()}, 2000);
  37.         document.getElementById('clicks').innerHTML = 'Waiting...'
  38. }


Первая функция создает экземпляр XMLHttpRequest. Точнее, ActiveXObject("Microsoft.XMLHTTP"), если не получится, то ActiveXObject("Msxml2.XMLHTTP"), если этого ничего нет, то xmlhttprequest (ну в файрфоксе как раз он и есть). Вторая - шлет скрипту rec.php данные, тот их обрабатывает и возвращает. rec.php выполняется 5 секунд, и возвращает цифру. Смысла в этом не ищите))
Ошибка появилась, когда я поставил таймаут. Если таймаут больше 5с, все нормально; если меньше, то дело доходит до функции .abort(), и вот такая вот ошибка. Может, кто-нибудь знает, в чем дело?
2. valenok - 10 Сентября, 2008 - 13:29:04 - перейти к сообщению
так вот в браузере фаерфокс нет такой штуки - activeX
3. Champion - 10 Сентября, 2008 - 14:08:21 - перейти к сообщению
Ничего страшного, XMLHttpRequest() создается; АктивХ - для др.браузеров.
Фразу про создание объекта не дописал сначала, извините. Исправил
4. valenok - 10 Сентября, 2008 - 16:21:32 - перейти к сообщению
CODE (text):
скопировать код в буфер обмена
  1. function getXmlHttp(){
  2. var xmlhttp;
  3. try {
  4. xmlhttp = new ActiveXObject("Msxml2.XMLHTTP");
  5. } catch (e) {
  6. try {
  7. xmlhttp = new ActiveXObject("Microsoft.XMLHTTP");
  8. } catch (E) {
  9. xmlhttp = false;
  10. }
  11. }
  12. if (!xmlhttp && typeof XMLHttpRequest!='undefined') {
  13. xmlhttp = new XMLHttpRequest();
  14. }
  15. return xmlhttp;
  16. }
  17.  
  18. function call()
  19. {
  20.         var req = getXmlHttp();
  21.         req.open('POST', 'a.php', true);
  22.          req.setRequestHeader("Content-type", "application/x-www-form-urlencoded");
  23.      req.setRequestHeader("Content-length", runs.length);
  24.      req.setRequestHeader("Connection", "close");
  25.    
  26.  
  27.         req.onreadystatechange = function()
  28.         {
  29.                 alert(req.readyState+' '+req.status + ' ' + req.responseText);
  30.                 if (req.readyState == 4)
  31.                 {
  32.                         clearTimeout(timepass);
  33.                         document.getElementById('clicks').innerHTML = req.statusText
  34.                         if(req.status == 200)
  35.                         {
  36.                                 runs=req.responseText;
  37.                                 document.getElementById('clicks').innerHTML =runs;
  38.                         }
  39.                         else document.getElementById('clicks').innerHTML ='Какая-то Ошибка';
  40.                 }
  41.                 else return;
  42.        
  43.         }
  44.  
  45. document.getElementById('clicks').innerHTML ='Процесс';
  46.  req.send('runs='+encodeURI(runs));
  47. var timepass = setTimeout(function(){document.getElementById('clicks').innerHTML ='Какая-то Ошибка2'; req.abort()}, 2000);
  48.  
  49. }
  50. var runs = 1;
  51. call();


Если бы ты сделал простеший дебаг и посмотрел что находится у тебя в переменных, а позже записывается в элемент с id=clicks то возсожно ты бы понял ошибку
5. Champion - 11 Сентября, 2008 - 08:43:21 - перейти к сообщению
По-моему, не в этом дело. Скрипт rec.php просто возвращает одну цифру, clicks - это div. Ваш код такой же ошибкой закончился.

В IE, работает номально, да и в Файрфоксе, если файрбага нет, то тоже внешне не видно ничего.
6. valenok - 11 Сентября, 2008 - 14:57:57 - перейти к сообщению
В том то и дело что одну цифру он не возвращает, а скорее всего много всяких тегов
которые потом и помещаются в этот див
7. Champion - 11 Сентября, 2008 - 15:28:14 - перейти к сообщению
нет, он на самом деле врозвращает одну цифру, и все прекрасно работает, если поставитьб большой тайм-аут (чтоб скрипт успел выполниться). Но как только ставим маленький тайм-аут и обрабатываем его, получается та вот ошибка.
8. valenok - 11 Сентября, 2008 - 15:34:20 - перейти к сообщению
http://www[dot]quirksmode[dot]org/blog/a[dot][dot][dot]p_notes_a_1[dot]html

 

Powered by ExBB FM 1.0 RC1