EOMY.NET Хостинг EOMY.NET: Форум поддержки
Трабл с AJAXter'ом. Не вижу ошибки, намекните пжлст, где она
Автор
Сообщение
noLove Два пингвина Зарегистрирован: 25.04.2007 Сообщения: 352 18114
Добавлено: Ср, 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;
}
В фаерфоксе и в опере работает, но в гугльхроме не работает. При этом отладчик не выдает никаких ошибок. Подскахите пожалуйста, где у меня здесь ошибки, и что вообще неправильно здесь написано. Спасибо! _________________ Друзья, уважайте труд других
http://xternalx.com - моя хомпага
Вернуться к началу
Alek$ 11 1110 1000 Зарегистрирован: 24.11.2007 Сообщения: 1136 Откуда: Новосибирск 26695
Вернуться к началу
noLove Два пингвина Зарегистрирован: 25.04.2007 Сообщения: 352 18114
Добавлено: Ср, 29 Июл, 2009 17:04 Заголовок сообщения:
Кстати, сейчас хром ругается:
Цитата: uncaught exception TypeError: Cannot set property 'onreadystatechange' of null
_________________ Друзья, уважайте труд других
http://xternalx.com - моя хомпага
Вернуться к началу
noLove Два пингвина Зарегистрирован: 25.04.2007 Сообщения: 352 18114
Добавлено: Ср, 29 Июл, 2009 17:06 Заголовок сообщения:
нашел вот это , но не понимаю, как именно править свой класс с учетом того текста _________________ Друзья, уважайте труд других
http://xternalx.com - моя хомпага
Вернуться к началу
noLove Два пингвина Зарегистрирован: 25.04.2007 Сообщения: 352 18114
Добавлено: Ср, 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);}
}
_________________ Друзья, уважайте труд других
http://xternalx.com - моя хомпага
Вернуться к началу
noLove Два пингвина Зарегистрирован: 25.04.2007 Сообщения: 352 18114
Добавлено: Ср, 29 Июл, 2009 18:23 Заголовок сообщения:
решение найдено
Код: if (window.XMLHttpRequest)
{
try
{
ajax = [b]new[/b] XMLHttpRequest();
return 1;
}
catch (e){ alert(e);}
}
теперь остается выяснить, почему у меня get и post запросы не проходят _________________ Друзья, уважайте труд других
http://xternalx.com - моя хомпага
Вернуться к началу
noLove Два пингвина Зарегистрирован: 25.04.2007 Сообщения: 352 18114
Добавлено: Ср, 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);});
_________________ Друзья, уважайте труд других
http://xternalx.com - моя хомпага
Вернуться к началу
noLove Два пингвина Зарегистрирован: 25.04.2007 Сообщения: 352 18114
Добавлено: Ср, 29 Июл, 2009 18:52 Заголовок сообщения:
Фигзнает короче. Не работает чето, выдает Request Timeout =(( _________________ Друзья, уважайте труд других
http://xternalx.com - моя хомпага
Вернуться к началу
Александр Михалицын Согнул ложку Зарегистрирован: 22.08.2008 Сообщения: 842 17894
Добавлено: Пт, 07 Авг, 2009 04:58 Заголовок сообщения:
noLove ,
вы можете дать ссылочку на "стенд" где я могу увидеть ошибку?
Я помогу... Но для этого надо "стенд". _________________Пригласительные коды
Вернуться к началу
Александр Михалицын Согнул ложку Зарегистрирован: 22.08.2008 Сообщения: 842 17894
Добавлено: Пт, 07 Авг, 2009 05:03 Заголовок сообщения:
noLove ,
если вы обращаетесь к домену google.com, то не удивительно что она не работает. Кроссдоменные запросы запрещены...
Зы. Качаю Хром. Сейчас проверю, если что, код поправлю и выложу. _________________Пригласительные коды
Вернуться к началу
Александр Михалицын Согнул ложку Зарегистрирован: 22.08.2008 Сообщения: 842 17894
Добавлено: Пт, 07 Авг, 2009 05:23 Заголовок сообщения:
Эм, все работает и под Хромом...
Кроссдоменные запросы работать не должны. _________________Пригласительные коды
Вернуться к началу
noLove Два пингвина Зарегистрирован: 25.04.2007 Сообщения: 352 18114
Добавлено: Сб, 08 Авг, 2009 17:44 Заголовок сообщения:
Александр Михалицын писал(а): Эм, все работает и под Хромом...
Кроссдоменные запросы работать не должны.
понятно. Недавно сам про это прочитал, что кроссдоменность запрещена.
А затестить можно здесь: http://xternalx.7pe.net/userbar/register.lua
Щас дописываю версию 1.*, она будет в стопитцот раз круче чем то, что имеется сейчас _________________ Друзья, уважайте труд других
http://xternalx.com - моя хомпага
Вернуться к началу
Powered by phpBB © 2001, 2005 phpBB Group