Javascript.RU

Создать новую тему Ответ
 
Опции темы Искать в теме
  #1 (permalink)  
Старый 30.07.2009, 15:41
Новичок на форуме
Отправить личное сообщение для nolka4 Посмотреть профиль Найти все сообщения от nolka4
 
Регистрация: 30.07.2009
Сообщений: 2

Написал класс-обертку над xmlhttp, но он не работает почему то:(
Код класса:
function Ajax() 
{ 

    this.versionInfo='xternalx Ajaxter v1.0'; 
    this.timeout = null;
    var request = null; 
    this.callbackHandler = null; 
    this.errorHandler = null; 
    this.isActiveX = false; 
    
   this.createAjax = function() 
   { 
      if (window.XMLHttpRequest) 
      { 
         try 
         { 
            request = new XMLHttpRequest(); 
            request.onreadystatechange = this.stateChanged;
            return 1; 
         } 
         catch (e){ alert('1'+e);} 
      } 
      else 
      if (window.ActiveXObject) 
      { 
         this.isActiveX=true; 
         try 
         { 
            request = new ActiveXObject('Msxml2.XMLHTTP');
            request.onreadystatechange = this.stateChanged;
            return 2; 
         } 
         catch (e){ alert('2'+e);} 
         try 
         { 
            request = new ActiveXObject('Microsoft.XMLHTTP'); 
            request.onreadystatechange = this.stateChanged;
            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()
   { 
      alert(request.readyState+' '+request.status);
      if(request.readyState == 4 && request.status == 200) 
      { 
          clearTimeout(this.timeout);
          this.callbackHandler(request.responseText); 
      } 
      else 
      { 
          this.errorHandler('ajaxter error: '+request.status+" - "+request.statusText); 
      } 
   }

   this.post = function(url,data,callback) 
    { 
        if(request) 
        { 
             request.open("POST",url,true);
             this.callbackHandler = callback;
             request.setRequestHeader('Content-Type', 'application/x-www-form-urlencoded'); 
             request.send(data);
             this.timeout = setTimeout( function(){ request.abort(); this.errorHandler("Request timeout<br/>Status: "+request.status+"<br />Status Text: "+request.statusText+"<br />Ready State: "+request.readyState) }, 10000);
        } 
    } 

   this.get = function(url, callback) 
   { 
        if(request) 
        { 
            this.callbackHandler = callback;
            request.open("GET",url,true);
            if(this.isActiveX) 
                request.send(); 
            else 
                request.send(null); 
            this.timeout = setTimeout( function(){ request.abort(); this.errorHandler("Request timeout<br/>Status: "+request.status+"<br />Status Text: "+request.statusText+"<br />Ready State: "+request.readyState) }, 10000);
        } 
   } 
   
   this.createAjax(); 
}


Соответственно, использую его так:
function newAjax() 
{ 
    a = new Ajax(); 
    a.setErrorHandler(errorHandler); 
    return a; 
} 

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

newAjax().get('http://xternalx.7pe.net/', function(data)
        {
            alert(data);
        }
);


При выполнении код не работает, выскакивает request timeout. При этом, ошибок в отладчике не вываливается(ни в фирефоксе, ни в хроме).

Ткните пальцем пожалуйста, где я ошибку допустил?

Последний раз редактировалось nolka4, 30.07.2009 в 16:02.
Ответить с цитированием
  #2 (permalink)  
Старый 30.07.2009, 20:48
Новичок на форуме
Отправить личное сообщение для nolka4 Посмотреть профиль Найти все сообщения от nolka4
 
Регистрация: 30.07.2009
Сообщений: 2

Проблема более не актуальна
Ответить с цитированием
  #3 (permalink)  
Старый 04.08.2009, 20:53
Интересующийся
Отправить личное сообщение для Volk_88 Посмотреть профиль Найти все сообщения от Volk_88
 
Регистрация: 23.07.2009
Сообщений: 17

up, продолжу эту тему, что бы не плодить новые, написал обертку для xmlhttpraquest, но вот проблема, работает только для одного вызова, для следующих не пашет, а теперь подробнее:

function Ajax(onDone, onFail) { // Создание класса Ajax
  this.onDone = onDone;
  this.onFail = onFail;
  var _t = this;
  var request = null;
  try {
    request = new XMLHttpRequest();
  } catch (trymicrosoft) {
    try {
      request = new ActiveXObject("Msxml2.XMLHTTP");
    } catch (othermicrosoft) {
      try {
        request = new ActiveXObject("Microsoft.XMLHTTP");
      } catch (failed) {
        request = null;
      }
    }
  }
  var readystatechange = function(){
	if (request.readyState == 4){
		if (request.status == 200){
			if(_t.onDone){_t.onDone(request.responseXML, request.responseText);}
		}else{
			if(_t.onFail){alert('fail');}
		}
	}
  }
  this.post = function(url, query){
	query = query2url(query);
	request.open("POST", url, true);
    request.onreadystatechange = readystatechange;
    request.setRequestHeader("Content-Type","application/x-www-form-urlencoded");
    request.send(query);
  };
  function query2url(qa){
	var query = [], q, i =0;

   for (var key in qa) {
     if (qa[key] === undefined || qa[key] === null || typeof(qa[key]) == 'function') continue;
     if (isArray(qa[key])) {
       for (var i = 0; i < qa[key].length; ++i) {
         if (qa[key][i] === undefined || qa[key][i] === null || typeof(qa[key][i]) == 'function') continue;
         query.push(escape(key) + '[]=' + escape(qa[key][i]));
       }
     } else {
       query.push(escape(key) + '=' + escape(qa[key]));
     }
   }
   return query.join('&');
  }
}


Первый код вызова:
comment = (function(){
	...
	var onDone = function(xml, text){
		...
	}
	var onFail = function(){
		...
	}
	
	var cajax = new Ajax(onDone, onFail);

	return{
		add: function(){
			act = 'add';
			setData();
			cajax.post(url, {'module':module,'mid':mid,'uid':uid,'text':text,'act':'add'});
		}
	}
}())

Второй код вызова, но тут не работает уже:
photo = (function(){
	...
	var onDone = function(xml, text){
		...
	}
	var onFail = function(){
		...
	}
	
	var pajax = new Ajax(onDone, onFail);

	return{
		next: function(){
			act = 'add';
			setData();
			pajax.post(url, {'module':module,'pid':pid,'uid':uid,'cat':cat,'act':'next'});
		}
	}
}())

Пробывал менять имена функций onDone, onFail на другие, что бы не пересекались с первыми, и все ровно не работает, на js я программирую неделю, так что я его еще плоховато знаю, подскажите, где я мог допустить ошибку, неправильно оформил обертку или не правильно использовал вызовы, или ... ?
Ответить с цитированием
Ответ



Опции темы Искать в теме
Искать в теме:

Расширенный поиск


Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
Почему не работает скрипт, подскажите aviaks Ваши сайты и скрипты 2 05.05.2009 14:38
Почему не работает JS с подгруженными в DOM элементами? V-z-z-HobboT jQuery 6 30.03.2009 14:02
почему не работает <body onload=test()> Ichigeki Общие вопросы Javascript 11 29.10.2008 13:49