Javascript.RU

Создать новую тему Ответ
 
Опции темы Искать в теме
  #1 (permalink)  
Старый 10.12.2012, 21:02
czp czp вне форума
Профессор
Отправить личное сообщение для czp Посмотреть профиль Найти все сообщения от czp
 
Регистрация: 15.10.2011
Сообщений: 213

xmlHttpRequest подскажите
сделал аякс обдним большим обьектом но столкнулся с таков вот проблемой

если вот так, то алерт в хроме(только в хроме в других браузерах все четко) выдает 4 раза :
createXmlHttp : function () {
    if (this.xmlHttp) return true;

    try {
      this.xmlHttp = new XMLHttpRequest();
    } catch(e) {
      try {
        this.xmlHttp = new ActiveXObject('Microsoft.XMLHttp');
	  } catch(e) { 
	    return false; 
	  }
    }
  
    if (this.xmlHttp) return true; 
  },
  
  xmlHttpRequest : function () {	  
    if ((this.xmlHttp.readyState == 4) || (this.xmlHttp.readyState == 0)) {		
      this.xmlHttp.open(this.method, this.url, true);
	  this.xmlHttp.setRequestHeader('Content-Type', 'application/x-www-form-urlencoded');
	  this.xmlHttp.onreadystatechange = this.query;	
	  this.xmlHttp.send(this.value);	  
    } else {
	  this.writehtml('AJAX Error : POTOK server ZANAT pleas retry');
	}
	
	return true;
  },
  
  query : function () {
    if (this.readyState == 4) {
	  if (this.status == 200) {alert(1);
	    this.responseText;
	  } else {
	    //this.writeHtml('Error: ' + xmlhttp.statusText);
	  }
    }
  },


а если вот так, то в хроме один раз алерт бьет, ну в других разумеется тоже норма работает :
createXmlHttp : function () {
    if (this.xmlHttp) return true;

    try {
      this.xmlHttp = new XMLHttpRequest();
    } catch(e) {
      try {
        this.xmlHttp = new ActiveXObject('Microsoft.XMLHttp');
	  } catch(e) { 
	    return false; 
	  }
    }
  
    if (this.xmlHttp) return true; 
  },
  
  xmlHttpRequest : function () {
	xmlHttp = this.xmlHttp;
	  
    if ((xmlHttp.readyState == 4) || (xmlHttp.readyState == 0)) {		
      xmlHttp.open(this.method, this.url, true);
	  xmlHttp.setRequestHeader('Content-Type', 'application/x-www-form-urlencoded');
	  xmlHttp.onreadystatechange = this.query;	
	  xmlHttp.send(this.value);	  
    } else {
	  this.writehtml('AJAX Error : POTOK server ZANAT pleas retry');
	}

	return true;
  },
  
  query : function () {
    if (xmlHttp.readyState == 4) {
	  if (xmlHttp.status == 200) {alert(1);
	    this.responseText;
	  } else {
	    //this.writeHtml('Error: ' + xmlhttp.statusText);
	  }
    }
  },


в че мпроблема? хочется с едлать как первый вариант, подскажите мою ошибку
Ответить с цитированием
  #2 (permalink)  
Старый 10.12.2012, 21:09
х.з
Посмотреть профиль Найти все сообщения от dmitriymar
 
Регистрация: 21.11.2010
Сообщений: 4,588

посмотри на что у тебя указывает this
Ответить с цитированием
  #3 (permalink)  
Старый 10.12.2012, 21:14
czp czp вне форума
Профессор
Отправить личное сообщение для czp Посмотреть профиль Найти все сообщения от czp
 
Регистрация: 15.10.2011
Сообщений: 213

в каком методе? в query - смотрел пишет - object XMLHttRequest
а в другом выше, сам обьект в котором все это дело крутится(родитель)
Ответить с цитированием
  #4 (permalink)  
Старый 10.12.2012, 21:18
х.з
Посмотреть профиль Найти все сообщения от dmitriymar
 
Регистрация: 21.11.2010
Сообщений: 4,588

czp,
ну дак рассуждай логически - у тебя вся разница только в использовании this . вот и просмотри- сам учись анализировать свой код. найди различия и анализируй их с остальным кодом -какой ты здесь не указал

Последний раз редактировалось dmitriymar, 10.12.2012 в 21:20.
Ответить с цитированием
  #5 (permalink)  
Старый 10.12.2012, 23:23
czp czp вне форума
Профессор
Отправить личное сообщение для czp Посмотреть профиль Найти все сообщения от czp
 
Регистрация: 15.10.2011
Сообщений: 213

ту проблему решил, подскажите вот такую штуку - мне надо, что бы перед вызовом аякса, и после, происходили события :
before();	
this.xmlHttpRequest();
after();

1 проблема :
если в функции before() написать код, то он выполнится, и после произойдет аякс запрос, но если сделать анимацию (или любой другой код используюший таймер) то он ее включает, и идет дальше по коду не завершив анимацию включает запрос, как можно сделать проверку завершение всей функции before? а потом уже запрос включать?

2. афтер работает только если поместить сюда
query : function () {
    if (this.readyState == 4) {
	  if (this.status == 200) {
		   document.body.innerHTML += this.responseText;
             after();
	  } else {
	    //this.writeHtml('Error: ' + this.statusText);
	  }
    }
  },


есле поместить его как выше я написал, то он срабатывает до того как еше не пришел ответ с сервера, как тут можно поступить? что бы after() в функцию query не ложить?

есть как то хороший метод но проверку завершения функций?
Ответить с цитированием
Ответ



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

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


Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
XMLHttpRequest и redirect developer_ AJAX и COMET 1 05.07.2012 02:33
Подскажите, пожалуйста, по поводу сессий php demoniqus AJAX и COMET 2 13.05.2012 10:52
ajax форма, подскажите где ошибка? bee AJAX и COMET 2 05.04.2012 23:15
Браузер не успевает определить высоту вновь созданного через XMLHttpRequest элемента Lockpickup AJAX и COMET 17 25.04.2011 17:58
XMLHttpRequest status=0, хотя запрос проходит. arigasa AJAX и COMET 4 15.02.2011 20:14