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

Ajax + IE, периодический теряется запрос
Все привет!
Периодически ajax скрипт в IE ведет себя странным образом, по сетевым логам видно, что IE почти 1 минуту пытается отправить запрос, потом происходит отправка в пол минуты и быстрый ответ с ошибкой сервера 500.

Данная проблема в основном замечается при листании фотографий в галереи. Работа JS не обрывается, и если открыть следующею фотку и вернуться обратно, зависания нету.

Все остальные браузеры работают идеально.

Кто-нибудь сталкивался с такой проблемой? Может это баг браузера и есть какой то способ обхода.
Читал что можно не использовать readystatechange и заменять на рекурсивный setTimeout с опросом readyState через каждый 10-50 мс (так реализовать в dojo с использованием setInterval) но решит ли это проблему?

var Ajax = function(){
	try {
    xhr = new XMLHttpRequest();
  } catch (trymicrosoft) {
    try {
      xhr = new ActiveXObject("Msxml2.XMLHTTP");
    } catch (othermicrosoft) {
      try {
        xhr = new ActiveXObject("Microsoft.XMLHTTP");
      } catch (failed) {
        xhr = null;
      }
    }
  }
	
	var readystatechange = function(){
		if(xhr.readyState != 4) return;
		if(xhr.status >= 200 && xhr.status < 400){
			var data = (dataType == 'json') ? json(xhr.responseText) : xhr.responseXML;
			var text = xhr.responseText;
			if(callback){ callback(data, text, savequery);}
			else if(_t.onComplete){_t.onComplete(data, text, savequery);}
		}else{
			if(_t.onError){_t.onError(strquery, savequery);}
		}
  }
	
	this.post = function(query, fn){
		if(typeof fn === "function"){
			callback = fn;
		}else callback = null;
		
		savequery = query;
		strquery = query2url(query);
		xhr.open("POST", url, async);
		xhr.onreadystatechange = readystatechange;
		xhr.setRequestHeader("Content-Type", contentType);
		xhr.send(strquery);
  };
}

Последний раз редактировалось Volk_88, 03.06.2011 в 12:10.
Ответить с цитированием