Javascript.RU

Создать новую тему Ответ
 
Опции темы Искать в теме
  #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.
Ответить с цитированием
  #2 (permalink)  
Старый 03.06.2011, 13:22
Профессор
Отправить личное сообщение для Маэстро Посмотреть профиль Найти все сообщения от Маэстро
 
Регистрация: 02.07.2010
Сообщений: 642

Сообщение от Volk_88 Посмотреть сообщение
Читал что можно не использовать readystatechange и заменять на рекурсивный setTimeout с опросом readyState через каждый 10-50 мс (так реализовать в dojo с использованием setInterval) но решит ли это проблему?
Думаю не решит, т.к. это немного из другой "оперы". dojo использует такую технологию для устранения утечки памяти в IE (т.к. в нем при классическом построении XMLHttpRequest происходит глубокое замыкание его на себя от чего и последующее накопление памяти...)
Ответить с цитированием
  #3 (permalink)  
Старый 07.06.2011, 08:40
Аватар для yashka525
Mr. Jacob
Отправить личное сообщение для yashka525 Посмотреть профиль Найти все сообщения от yashka525
 
Регистрация: 20.01.2011
Сообщений: 194

У меня была проблема с Ajax в IE, и я после долгих исканий и переписывания кода все таки нашел. Этот кусок кода надо вставить в php файл, на который идет запрос:
header("Last-Modified: " . gmdate("D, d M Y H:i:s") . " GMT");
header("Cache-Control: no-store, no-cache, must-revalidate");
header("Cache-Control: post-check=0, pre-check=0", false);
header("Pragma: no-cache");
Ответить с цитированием
  #4 (permalink)  
Старый 07.06.2011, 11:25
Интересующийся
Отправить личное сообщение для Volk_88 Посмотреть профиль Найти все сообщения от Volk_88
 
Регистрация: 23.07.2009
Сообщений: 17

Заголовки к сожалению не помогают исправить ситуацию, периодически зависает запрос
Наверно баг IE, вариант вижу только один, установить таймаут в 2-5 сек, если сработал, сделать перезапуск запроса.
Ответить с цитированием
  #5 (permalink)  
Старый 10.06.2011, 11:02
Профессор
Отправить личное сообщение для Маэстро Посмотреть профиль Найти все сообщения от Маэстро
 
Регистрация: 02.07.2010
Сообщений: 642

Сообщение от Volk_88 Посмотреть сообщение
Заголовки к сожалению не помогают исправить ситуацию, периодически зависает запрос
Наверно баг IE, вариант вижу только один, установить таймаут в 2-5 сек, если сработал, сделать перезапуск запроса.
Я уже неоднократно говорил, что в IE с кешированием проблематично. На форуме это обсуждалось. Рекомендую при формировании URL запроса добавлять случайный параметр
... +'&aaaaaaa='+Math.random()
тогда IE пробивается.
Ответить с цитированием
Ответ



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

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


Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
Ajax запрос. Возврат массива. Rinas jQuery 5 09.04.2011 18:58
ajax запрос на сторонний сайт vanderv jQuery 2 15.01.2011 09:49
AJAX запрос на другой протокол Veresc AJAX и COMET 2 18.09.2009 18:47
Синхронный запрос данных по AJAX Shasoft AJAX и COMET 2 03.03.2009 14:07
ajax запрос с подгружемным js HelpeR AJAX и COMET 1 27.10.2008 12:44