Javascript-форум (https://javascript.ru/forum/)
-   jQuery (https://javascript.ru/forum/jquery/)
-   -   ПРинудительная остановка Ajax запроса (https://javascript.ru/forum/jquery/24207-prinuditelnaya-ostanovka-ajax-zaprosa.html)

Suharik 21.12.2011 16:11

ПРинудительная остановка Ajax запроса
 
Всем привет. Нем могу нати решение.
Есть кнопка, по нажатию на котоую происходит ajax запрос. Собственно если кликать 10 раз вподрят, идет 10 запросов. Это мне очень не нравится. так как иногда какой-то один не прохоит, и я получаю ошибку.
Можно ли останавливать заведомо известные, выполняющиеся запросы аякса?
Например у меня выполняется 2 разных запроса, один из них мне надо по клику стопорнуть и не получать результат. Как так сделать?

devote 21.12.2011 17:30

xhr.abort();

Suharik 21.12.2011 18:01

Спасибо. но если через jquery тогда я нашел такой параметр
async:false,
То что нужно

trikadin 21.12.2011 18:06

Цитата:

Сообщение от Suharik
Спасибо. но если через jquery тогда я нашел такой параметр
async:false,
То что нужно

ЩИТО?

Nekromancer 21.12.2011 18:08

Suharik,
ОМГ, вы чего? Что в jQuery аборта нету?

devote 21.12.2011 18:42

Цитата:

Сообщение от Suharik (Сообщение 144998)
Спасибо. но если через jquery тогда я нашел такой параметр
async:false,
То что нужно

в джуквери точно также

var jqxhr = $.ajax({......});

jqxhr.abort();

trikadin 21.12.2011 18:43

Цитата:

Сообщение от Nekromancer
ОМГ, вы чего? Что в jQuery аборта нету?

Не, он путает асинхронность с отменой вызова. Epic Fail)

Nekromancer 21.12.2011 19:18

trikadin,
Ага, трындец )

Suharik 22.12.2011 18:33

Я не напутал. Мне просто подошел вариант с тем что я не останавливаю запрос а просто недаю выполнятся одновременно 2-3-4-5 запросам. все попорядку. Один получил ответ, запускается второй.
С абортом не ковырялся, сказать ничего не могу.

devote 22.12.2011 18:34

Suharik,
async:false,
вешает браузер на время запроса, не лучший вариант это юзать.

Nekromancer 22.12.2011 19:48

devote,
Я помню когда Одноклассники юзали GWT и синхронные запросы. Я долго смеялся.

devote 22.12.2011 19:54

Цитата:

Сообщение от Nekromancer
devote,
Я помню когда Одноклассники юзали GWT и синхронные запросы. Я долго смеялся.

везде хватает дураков... вот например вконтакте там вообще утечка памяти у них, дык по сей день никто не исправил. Это проявляется когда откроешь страницу и пару суток не закрываешь ее. А при обращении к странице браузер виснет либо вылетает. Но им же пофиг. Главное что работает, пусть и криво но работает. Поэтому я вконтактом не пользуюсь с тех пор как проявилась эта проблема, так как у меня компьютер никогда не выключается, и тем самым браузер открыт всегда. А эти повисания мне не очень приятны.

qwerty13 17.03.2012 16:17

Пытаюсь прервать ajax запрос abort'ом, и, передача данных останавливается, но аякс все равно ждёт ответ от сервера.
Как сделать, чтобы он не ждал ответа от сервера?

Nekromancer 17.03.2012 16:29

qwerty13,
Это как? Не закрывается соединение? Как вы это видите? Какой браузер? Почему ваш сервер не реагирует на закрытие соединения?

qwerty13 17.03.2012 17:21

Цитата:

Сообщение от Nekromancer (Сообщение 163658)
qwerty13,
Это как? Не закрывается соединение? Как вы это видите? Какой браузер? Почему ваш сервер не реагирует на закрытие соединения?

Ну вот например:
js:
var id = false;
function ajax(q){
	if ( id ) id.abort();
	id = $.post(url,{to:q},function(d){alert(d);});
}
$('#button').live('click',function(){ ajax('qwe'); return false;})

php:
<?php
sleep(5);
exit('ok');
?>

Если нажать на кнопку то аякс отправит запрос...
Если ещё раз нажать на кнопку, то запрос (вроде бы как) прерывается и аякс создаёт новый запрос, но время ожидания уже около 10 сек. Если ещё раз нажать, то ждать будет около 15 сек и т.д.
Это хорошо видно в мозилле с помощью Firrebug'а, (+такое же в опере, в остальных браузерах не знаю).
А сервер у меня Denwer.

Nekromancer 17.03.2012 23:48

qwerty13,
Тут проблема серверного кода. Не знаю как php работает, но предполагаю, что когда соединение прекращается, а скрипт всё ещё спит, он не выводится из сна. То есть он в любом случае ждёт эти пять секунд. А так как на Апаче запросы становятся в очередь, то с каждым новым запросом ждёте время предищуего исполнения скрипта, плюс нового. Как то так.

qwerty13 18.03.2012 00:17

Nekromancer,
Значит если скрипт будет выводить результат за (например) 0.03 сек., то в независимости от скорости интернета у пользователя и объёма возвращаемых скриптом дынных, следующий запрос аякса будет проходить нормально (без задержек)!?

Nekromancer 18.03.2012 00:25

qwerty13,
Ну задержкой как раз будет скорость интернета и объем передаваемых данных по нему. Так же скорость отрисовки на его компьютере.


Часовой пояс GMT +3, время: 04:32.