2012-07-08 2 views
-4

Моя проблема в том, что когда пользователь нажимает на ссылку на веб-сайте, я использую jquery, чтобы поймать событие и ajax для обновления базы данных , если я сделаю что-то вроде этого, займет LITLE время из-за Waitting для формы ответить сервераКак можно поймать событие ajax отправить на сервер, не дожидаясь ответа сервера

$.ajax({ 
success: function() { 
... 
window.href = link; 
} 
}); 

Я хочу что-то вроде

$.ajax({ 
alreadysend: function() { 
... 
} 
}); 

Я прочитал документ Аякса, но я не могу найти решение моей проблемы.

EDIT: я решить мою проблему, мне нужно работать на JQuery, спасибо Вам все

+1

Вы имеете в виду, что хотите выполнить вызов AJAX и позволить пользователю перейти от текущей страницы? – Lix

+1

Вы хотите, чтобы пользователь не нажимал кнопку еще раз, пока ответ не вернется с сервера? – Tomer

+1

Похоже, у вас есть операция блокировки из-за операции с базой данных, требующей времени. Неясно, что вы хотите предотвратить или разрешить. Не могли бы вы дать более подробную информацию, пожалуйста :)? –

ответ

4

Он делает это по умолчанию, поскольку Ajax является асинхронным! Если вы хотите, чтобы код выполнялся независимо от того, был ли сервер достигнут и ответил, просто поместите свой исполняемый код после блока Ajax.

С другой стороны, если вы хотите узнать, выполнил ли пользователь действие отправки, вы можете использовать переменную области приложения для переключения по вызову и завершенным событиям. (Т.е. установлен верно, когда пользователь инициирует вызов Ajax По завершении установки на ложный Запрещает вызов я уже правда.).

1

Почему вы не просто вызвать функцию вы хотите позвонить после $.ajax линии? Как это:

$.ajax({ ... }); 
do_things(); 

Редактировать Если вы хотите сделать перенаправлять, вам придется ждать вызова AJAX, чтобы вернуться, чтобы убедиться, она была успешной или нет. Если вам все равно, было ли это успешным, и просто заботиться о том, чтобы он вообще вызывал вызов, вы можете поместить его в строку после вызова $ .ajax, так как звонок происходит асинхронно. В любом случае нам нужна дополнительная информация о том, чего вы хотите добиться точно.

+0

Почему downvote? Если я не понял этот вопрос, пожалуйста, дайте мне знать. Вызов ajax будет происходить асинхронно сразу после вызова этой функции. –

+0

И если функция 'do_things()' является перенаправлением, как указано в вопросе? – Lix

+0

О, перенаправление, я вижу сейчас. Тем не менее это не было сказано в вопросе. –

1

Просто позвонить код сразу после вызова $ .ajax:

$.ajax({success: function(){ 
    // done after server response 
}}); 

// do something immediately after 

Ajax-вызов асинхронный, поэтому ваш скрипт не заблокирован.

0

Я не уверен на 100% того, что вы пытаетесь сделать, но если вы хотите дождаться возврата вызова ajax до того, как ваш код продолжит работу, вы можете установить его для этого, установив для async значение false, хотя его стоит отметить, что это своего рода счетчик производительности и устарел в jQuery 1.8.

http://api.jquery.com/jQuery.ajax/

По умолчанию все запросы посылаются асинхронно (т.е. это устанавливается в истинной по умолчанию). Если вам нужны синхронные запросы, установите для этой опции значение false. Кросс-доменные запросы и dataType: запросы «jsonp» не поддерживают синхронную работу. Обратите внимание, что синхронные запросы могут временно заблокировать браузер, отключив любые действия, пока активен запрос . Начиная с jQuery 1.8, использование async: false устарело.

Смежные вопросы