EOMY.NET
Хостинг EOMY.NET: Форум поддержки
 
 FAQFAQ   ПоискПоиск   ПользователиПользователи   ГруппыГруппы   РегистрацияРегистрация 
 ПрофильПрофиль   Войти и проверить личные сообщенияВойти и проверить личные сообщения   ВходВход 
RSS Feed  

Трабл с AJAXter'ом. Не вижу ошибки, намекните пжлст, где она

 
Начать новую тему   Ответить на тему    Список форумов EOMY.NET -> JavaScript, AJAX
Трабл с AJAXter'ом. Не вижу ошибки, намекните пжлст, где она
Автор Сообщение
noLove
Два пингвина
Два пингвина


Зарегистрирован: 25.04.2007
Сообщения: 352

18122 Монеты

СообщениеДобавлено: Ср, 29 Июл, 2009 16:09    Заголовок сообщения: Трабл с AJAXter'ом. Не вижу ошибки, намекните пжлст, где она Ответить с цитатой

Доброго времени суток!
Как то давным-давно я написал класс для работы с Ajax:
Код:

function Ajax()
{

   this.createAjax = function()
   {
      if (window.XMLHttpRequest)
      {
         try
         {
            ajax=XMLHttpRequest();
            return 1;
         }
         catch (e){}
      }
      else
      if (window.ActiveXObject)
      {
         this.isActiveX=true;
         try
         {
            ajax=ActiveXObject('Msxml2.XMLHTTP');
            return 2;
         }
         catch (e){}
         try
         {
            ajax=ActiveXObject('Microsoft.XMLHTTP');
            return 2;
         }
         catch (e){}
      }
         return null;
   }


   this.setErrorHandler = function(handler)
   {
      this.errorHandler=handler;
   }

   this.post = function(url,data,callback)
    {
        if(ajax)
        {
         callbackHandler=callback;
         ajax.open("POST",url,true);
         ajax.setRequestHeader('Content-Type', 'application/x-www-form-urlencoded');
         ajax.send(data);
        }
    }

   this.get = function(url, callback)
    {
        if(ajax)
        {
           callbackHandler=callback;
           ajax.open("GET",url,true);
         if(this.isActiveX)
            ajax.send();
         else
            ajax.send(null);
        }
    }

   this.stateChanged = function()
   {
      if(ajax.readyState == 4)
      {
          if(ajax.status == 200)
          {
             callbackHandler(ajax.responseText);
          }
          else
          {
             alert('ajaxter error: '+ajax.status+" - "+ajax.statusText);
          }
      }
   }

   this.versionInfo='xternalx ajaxter v1.0';
   var ajax=null;
   var callbackHandler=null;
   var errorHandler=null;
   this.isActiveX=false;
   this.createAjax();
   ajax.onreadystatechange=this.stateChanged;
}


В фаерфоксе и в опере работает, но в гугльхроме не работает. При этом отладчик не выдает никаких ошибок. Подскахите пожалуйста, где у меня здесь ошибки, и что вообще неправильно здесь написано. Спасибо! Smile
_________________
Друзья, уважайте труд других Wink
http://xternalx.com - моя хомпага
Вернуться к началу
Посмотреть профиль Отправить личное сообщение
Alek$
11 1110 1000
11 1110 1000


Зарегистрирован: 24.11.2007
Сообщения: 1140
Откуда: Новосибирск
26958 Монеты

СообщениеДобавлено: Ср, 29 Июл, 2009 16:29    Заголовок сообщения: Ответить с цитатой

noLove
первое, что приходит в голову: хром вообще поддерживает window.XMLHttpRequest?
_________________
Самая страшная ошибка - это ошибка без видимых причин и конкретных последствий.
phpBB3 [db_update.php generator]
phpBB3 [Russian]
Антисоциальный блог
Вернуться к началу
Посмотреть профиль Отправить личное сообщение Посетить сайт автора
noLove
Два пингвина
Два пингвина


Зарегистрирован: 25.04.2007
Сообщения: 352

18122 Монеты

СообщениеДобавлено: Ср, 29 Июл, 2009 17:04    Заголовок сообщения: Ответить с цитатой

Кстати, сейчас хром ругается:

Цитата:
uncaught exception TypeError: Cannot set property 'onreadystatechange' of null

_________________
Друзья, уважайте труд других Wink
http://xternalx.com - моя хомпага
Вернуться к началу
Посмотреть профиль Отправить личное сообщение
noLove
Два пингвина
Два пингвина


Зарегистрирован: 25.04.2007
Сообщения: 352

18122 Монеты

СообщениеДобавлено: Ср, 29 Июл, 2009 17:06    Заголовок сообщения: Ответить с цитатой

нашел вот это, но не понимаю, как именно править свой класс с учетом того текста
_________________
Друзья, уважайте труд других Wink
http://xternalx.com - моя хомпага
Вернуться к началу
Посмотреть профиль Отправить личное сообщение
noLove
Два пингвина
Два пингвина


Зарегистрирован: 25.04.2007
Сообщения: 352

18122 Монеты

СообщениеДобавлено: Ср, 29 Июл, 2009 18:22    Заголовок сообщения: Ответить с цитатой

Таак, если при создании объекта в xmlHTTTPRequest в catch(e){} запихать alert(e), то при загрузке скрипта хром говорит:
TypeError: DOM constructor cannot be called as a function.

Эксепшн вылетает здесь:
Код:
if (window.XMLHttpRequest)
      {
         try
         {
            ajax = XMLHttpRequest();
            return 1;
         }
         catch (e){ alert(e);}
      }

_________________
Друзья, уважайте труд других Wink
http://xternalx.com - моя хомпага
Вернуться к началу
Посмотреть профиль Отправить личное сообщение
noLove
Два пингвина
Два пингвина


Зарегистрирован: 25.04.2007
Сообщения: 352

18122 Монеты

СообщениеДобавлено: Ср, 29 Июл, 2009 18:23    Заголовок сообщения: Ответить с цитатой

решение найдено Very Happy
Код:
if (window.XMLHttpRequest)
      {
         try
         {
            ajax = [b]new[/b] XMLHttpRequest();
            return 1;
         }
         catch (e){ alert(e);}
      }

теперь остается выяснить, почему у меня get и post запросы не проходят Very Happy
_________________
Друзья, уважайте труд других Wink
http://xternalx.com - моя хомпага
Вернуться к началу
Посмотреть профиль Отправить личное сообщение
noLove
Два пингвина
Два пингвина


Зарегистрирован: 25.04.2007
Сообщения: 352

18122 Монеты

СообщениеДобавлено: Ср, 29 Июл, 2009 18:36    Заголовок сообщения: Ответить с цитатой

Итак, класс сейчас выглядит так:
Код:
/*
 * XmlHTTPRequest wrapper for AJAX. made by nolka aka xternalx, 07.08
 */

function Ajax()
{

   this.createAjax = function()
   {
      if (window.XMLHttpRequest)
      {
         try
         {
            ajaxRequest = new XMLHttpRequest();
            return 1;
         }
         catch (e){ alert('1'+e);}
      }
      else
      if (window.ActiveXObject)
      {
         this.isActiveX=true;
         try
         {
            ajaxRequest = new ActiveXObject('Msxml2.XMLHTTP');
            return 2;
         }
         catch (e){ alert('2'+e);}
         try
         {
            ajaxRequest = new ActiveXObject('Microsoft.XMLHTTP');
            return 2;
         }
         catch (e){ alert('3'+e);}
      }
         return null;
   }

   this.getBrowserName = function()
   {
       var ua = navigator.userAgent.toLowerCase();
       // Определим Internet Explorer
       if(ua.indexOf("msie") != -1 && ua.indexOf("opera") == -1
               && ua.indexOf("webtv") == -1)
       {
           return "msie"
       }
       // Opera
       if(ua.indexOf("opera") != -1)
       {
           return "opera"
       }
       
       // google chrome
       if(ua.indexOf("chrome") != -1)
       {
           return "chrome";
       }
       
       // Gecko = Mozilla + Firefox + Netscape
       if(ua.indexOf("gecko") != -1)
       {
           return "gecko";
       }
       // Safari, используется в MAC OS
       if(ua.indexOf("safari") != -1)
       {
           return "safari";
       }
       // Konqueror, используется в UNIX-системах
       if(ua.indexOf("konqueror") != -1)
       {
           return "konqueror";
       }

       return "unknown";
   }

   this.setErrorHandler = function(handler)
   {
      this.errorHandler = handler;
   }
   
   this.stateChanged = function()
   {
      if(ajaxRequest.readyState == 4)
      {
          clearTimeout(this.timeout)
          if(ajaxRequest.status == 200)
          {
             callbackHandler(ajaxRequest.responseText);
          }
          else
          {
              this.errorHandler('ajaxRequestter error: '+ajaxRequest.status+" - "+ajaxRequest.statusText);
          }
      }
   }

   this.post = function(url,data,callback)
    {
        if(ajaxRequest)
        {
         callbackHandler = callback;
         ajaxRequest.open("POST",url,true);
         ajaxRequest.setRequestHeader('Content-Type', 'application/x-www-form-urlencoded');
         ajaxRequest.send(data);
         this.timeout = setTimeout( function(){ ajaxRequest.abort(); this.errorHandler("Timeout") }, 10000);
        }
    }

   this.get = function(url, callback)
    {
        if(ajaxRequest)
        {
           callbackHandler = callback;
           ajaxRequest.open("GET",url,true);
           if(this.isActiveX)
              ajaxRequest.send();
           else
                ajaxRequest.send(null);
            this.timeout = setTimeout( function(){ ajaxRequest.abort(); this.errorHandler("Requert timeout") }, 10000);
        }
    }

   this.versionInfo='xternalx ajaxRequestter v1.0';
   this.timeout = null;
   var ajaxRequest = null;
   var callbackHandler = null;
   this.errorHandler = null;
   this.isActiveX = false;
   this.createAjax();
   ajaxRequest.onreadystatechange = this.stateChanged; 

}

Гуглохром ругается:
Цитата:
Uncaught TypeError: Object #<an XMLHttpRequest> has no method 'errorHandler'


Строка 95:
Код:
 this.errorHandler('ajaxRequestter error: '+ajaxRequest.status+" - "+ajaxRequest.statusText);


Работаю со своим классом так:
Код:
function newAjax()
{
    a = new Ajax();
    a.setErrorHandler(errorHandler);
    return a;
}

function errorHandler(errorMsg)
{
    ShowMessage('Ошибка запроса',errorMsg);
}

newAjax().get('http://google.com', function(data){alert(data);});


_________________
Друзья, уважайте труд других Wink
http://xternalx.com - моя хомпага
Вернуться к началу
Посмотреть профиль Отправить личное сообщение
noLove
Два пингвина
Два пингвина


Зарегистрирован: 25.04.2007
Сообщения: 352

18122 Монеты

СообщениеДобавлено: Ср, 29 Июл, 2009 18:52    Заголовок сообщения: Ответить с цитатой

Фигзнает короче. Не работает чето, выдает Request Timeout =((
_________________
Друзья, уважайте труд других Wink
http://xternalx.com - моя хомпага
Вернуться к началу
Посмотреть профиль Отправить личное сообщение
Александр Михалицын
Согнул ложку
Согнул ложку


Зарегистрирован: 22.08.2008
Сообщения: 924

23430 Монеты

СообщениеДобавлено: Пт, 07 Авг, 2009 04:58    Заголовок сообщения: Ответить с цитатой

noLove,
вы можете дать ссылочку на "стенд" где я могу увидеть ошибку?
Я помогу... Smile Но для этого надо "стенд". Wink
Вернуться к началу
Посмотреть профиль Отправить личное сообщение Посетить сайт автора
Александр Михалицын
Согнул ложку
Согнул ложку


Зарегистрирован: 22.08.2008
Сообщения: 924

23430 Монеты

СообщениеДобавлено: Пт, 07 Авг, 2009 05:03    Заголовок сообщения: Ответить с цитатой

noLove,
если вы обращаетесь к домену google.com, то не удивительно что она не работает. Smile Кроссдоменные запросы запрещены... Wink

Зы. Качаю Хром. Very Happy Сейчас проверю, если что, код поправлю и выложу. Wink
Вернуться к началу
Посмотреть профиль Отправить личное сообщение Посетить сайт автора
Александр Михалицын
Согнул ложку
Согнул ложку


Зарегистрирован: 22.08.2008
Сообщения: 924

23430 Монеты

СообщениеДобавлено: Пт, 07 Авг, 2009 05:23    Заголовок сообщения: Ответить с цитатой

Эм, все работает и под Хромом... Smile
Кроссдоменные запросы работать не должны. Wink
Вернуться к началу
Посмотреть профиль Отправить личное сообщение Посетить сайт автора
noLove
Два пингвина
Два пингвина


Зарегистрирован: 25.04.2007
Сообщения: 352

18122 Монеты

СообщениеДобавлено: Сб, 08 Авг, 2009 17:44    Заголовок сообщения: Ответить с цитатой

Александр Михалицын писал(а):
Эм, все работает и под Хромом... Smile
Кроссдоменные запросы работать не должны. Wink

понятно. Недавно сам про это прочитал, что кроссдоменность запрещена.
А затестить можно здесь: http://xternalx.7pe.net/userbar/register.lua
Щас дописываю версию 1.*, она будет в стопитцот раз круче чем то, что имеется сейчас Smile
_________________
Друзья, уважайте труд других Wink
http://xternalx.com - моя хомпага
Вернуться к началу
Посмотреть профиль Отправить личное сообщение
Показать сообщения:   
Начать новую тему   Ответить на тему    Список форумов EOMY.NET -> JavaScript, AJAX Часовой пояс: GMT
Страница 1 из 1

 


Rambler's Top100   Рейтинг@Mail.ru    



Powered by phpBB © 2001, 2005 phpBB Group