Javascript.RU

Создать новую тему Ответ
 
Опции темы Искать в теме
  #1 (permalink)  
Старый 11.02.2013, 23:55
Аватар для mi.rafaylik
Кандидат Javascript-наук
Отправить личное сообщение для mi.rafaylik Посмотреть профиль Найти все сообщения от mi.rafaylik
 
Регистрация: 07.12.2012
Сообщений: 113

не работает abort() для ajax-запроса
Всем привет ))
Читал мануалы, и пытался сначала разобраться по ним, но увы, баран я баран.
Задача - после отправки ajax-запроса, остановить его (оборвать) по действию пользователя (событие click()), независимо от таймаута самого запроса. Юзаю jQuery, и что-то делаю неправильно, потому что chatExit.abort(); не обрывает запрос :/
Приведу выдержки из кода, которые касаются моего вопроса, опуская пользовательские функции:
$(document).ready(function(){

// функция отправки запроса на наличие новых сообщений
function chatConnect(){
	// даём имя переменной, чтоб потом сделать для неё chatExit.abort()
	var chatExit = $.ajax({
		type: 'POST',
		url: 'process.php',
		data: 'lastmsg='+lastmsg, // передаём данные последнего полученного сообщения
		dataType: 'json',
		cache: false,
		timeout: 180000, // при отсутствии ответа с сервера
		success: function(){
			$('.chat-posts').html('...'); // здесь выводим полученные данные
			// выполняем новый запрос при успешном выполнении
			chatConnect();
		},
		error: function(){
			// выполняем новый запрос по окончанию timeout
			chatConnect();
		}
	});
};

// вызываем функцию при входе в чат
$('.chat-enter').click(function(){
	chatConnect();
});

// обрываем текущий запрос при выходе из чата
$('.chat-exit').click(function(){
	chatExit.abort();
});

});

Есть догадка что abort() не видит переменную chatExit так как она находится внутри другой функции. Может это быть причиной?

Последний раз редактировалось mi.rafaylik, 12.02.2013 в 00:03.
Ответить с цитированием
  #2 (permalink)  
Старый 12.02.2013, 00:06
Аватар для danik.js
Профессор
Отправить личное сообщение для danik.js Посмотреть профиль Найти все сообщения от danik.js
 
Регистрация: 11.09.2010
Сообщений: 8,804

Сообщение от mi.rafaylik
Может это быть причиной
Именно это и есть причина. Объявите эту переменную немного выше, в области видимости обеих функций.
Ответить с цитированием
  #3 (permalink)  
Старый 12.02.2013, 00:11
Аватар для mi.rafaylik
Кандидат Javascript-наук
Отправить личное сообщение для mi.rafaylik Посмотреть профиль Найти все сообщения от mi.rafaylik
 
Регистрация: 07.12.2012
Сообщений: 113

danik.js, теперь порядок, спасибо )

Последний раз редактировалось mi.rafaylik, 12.02.2013 в 01:11.
Ответить с цитированием
  #4 (permalink)  
Старый 12.02.2013, 08:37
Аватар для mi.rafaylik
Кандидат Javascript-наук
Отправить личное сообщение для mi.rafaylik Посмотреть профиль Найти все сообщения от mi.rafaylik
 
Регистрация: 07.12.2012
Сообщений: 113

Попутно возникла следующая ситуация:
Я выполняю abort() для переменной chatExit, а в самой переменной (точнее в ajax-запросе) при этом наступает событие error, при котором отправляется повторный запрос.

Решил проблему так:
При выходе из чата скрываю блок с сообщениями (chat-posts) и отображаю блок логина.
В событии error (которое в ajax-запросе) пишу функцию (которую выношу из запроса). В функции пишу условие - если блок chat-posts видим (is:visible) тогда выполняется отправка повторного ajax-запроса. Если же chat-posts невидим (вышли из чата), ничего не происходит ))
Ответить с цитированием
  #5 (permalink)  
Старый 12.02.2013, 10:14
Аватар для danik.js
Профессор
Отправить личное сообщение для danik.js Посмотреть профиль Найти все сообщения от danik.js
 
Регистрация: 11.09.2010
Сообщений: 8,804

Странно что abort() вызывает error. Однако думаю в обработчике error можно определить причину возникновения ошибки (по статус-коду или еще как). И в случае аборта - просто игнорировать ее.
Ответить с цитированием
Ответ



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

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


Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
ПРинудительная остановка Ajax запроса Suharik jQuery 17 18.03.2012 00:25
Обработка данных во время AJAX запроса user783 AJAX и COMET 5 09.12.2011 03:24
Остановка ajax запроса Serpanok Общие вопросы Javascript 2 06.06.2011 16:35
Остановка Ajax запроса по таймауту. Phantik AJAX и COMET 0 24.02.2010 11:21
Сохранение результата ajax запроса после нажатия 'back' gregOlsen AJAX и COMET 5 18.11.2009 12:23