Установить очередность событий JS?

12
Qest
На сайте с 21.10.2010
Offline
40
2618

Использую фреймворк pjax, тоесть при нажатии на ссылку в теге <a> на странице, вся страница не перезагружается, а только часть, короче как вконтакте или твиттер. И мне нужно чтобы обновление страницы происходило только через тэг <a>, тоесть обновить страницу по JS нельзя.

При нажатии на ссылку, сначала аяксом передается информация php скипту который делает запись в таблице SQL и возвращает id этой новой записи, который потом добавляется как GET к ссылке, и только после этого должен сработать переход по ссылке от тега <a> чтобы в URL был этот GET.

Так вот, можно ли установить очередность событий так чтобы переход по ссылке осуществился только после того как выполнится процесс ajax?

dkameleon
На сайте с 09.12.2005
Offline
386
#1
Qest:
Так вот, можно ли установить очередность событий так чтобы переход по ссылке осуществился только после того как выполнится процесс ajax?

да.

делайте синхронный запрос.

Дизайн интерьера (http://balabukha.com/)
Qest
На сайте с 21.10.2010
Offline
40
#2
dkameleon:
да.
делайте синхронный запрос.

Спасибо, помогло, осуществил так:

<a href="site.ru" onmouseup="функция которая меняет href">link</a>

Тоесть все равно это не совсем корректно, так как использовал onmouseup, чтобы скрипт сработал перед переходом по ссылке который происходит после onclick который после onmouseup. Тоесть если использовать onclick вместо onmouseup то ничего не сработает, так как переход по ссылке выполняется сначала.

А можно ли как то вручную задать, что если бы даже указать onclick то как то прописать что сначала выполняется скрипт, а только потом переход?

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

ukrdev
На сайте с 15.11.2011
Offline
31
#3

Qest, что бы не срабатывал переход по ссылке можно отключить стандартное событие клика по ссылке event.preventDefault()

При синхронном запросе полностью блокируется js движок и ожидается завершение выполнения запроса.

dkameleon
На сайте с 09.12.2005
Offline
386
#4

Qest, вообще с онклик тоже должно бы работать.

он выполняется до осуществления перехода по хреф

Qest
На сайте с 21.10.2010
Offline
40
#5
dkameleon:
Qest, вообще с онклик тоже должно бы работать.
он выполняется до осуществления перехода по хреф

Да, извиняюсь, у меня не работало когда использовал аякс асинхронно, отсюда и вывод, вообщем в том что было асинхронно и была проблема, так как php просто не успевал отработать и поэтому аякс не успевал добавить GET в href

[Удален]
#6

Ну во-первых, вы используете не фреймворк, а плагин который работает на фреймворке jQuery(кстати, не понятно зачем).

А JavaScript впринципе асинхронен, и это значит что callback ваш друг, соответственно ваша задача решается простым вызовом document.location = $(this).attr('href') в функции колбэке на окончание аякс-запроса. как то так:


..
$('a').click(function(){
$.ajax({
url: $(this).attr('href'),
success: function({
document.location = $(this).attr('href')
})
})
})
dkameleon
На сайте с 09.12.2005
Offline
386
#7

profaller, задачу-то почитайте, ли свое решение проверьте.

как минимум нужно:

1. отмена ивента.

2. передача параметра для урла.

[Удален]
#8

задача у ТС была выполнить переход по оканчанию аякс-запроса. занавес.

dkameleon
На сайте с 09.12.2005
Offline
386
#9
profaller:
задача у ТС была выполнить переход по оканчанию аякс-запроса. занавес.

ну логично: высрал непроверенного кода, пальцы растопырил и, считай, дело сделал :)

при асинхронном запросе, пока будет идти запрос на сервер и ответ обратно, произойдет переход по ссылке в href ещё ДО окончания запроса - нет отмены дефолтного ивента. так что задача НЕ выполнена.

кроме того, во внутренней анонимной функции $(this).attr('href') не будет доступен. угадайте почему.

ну и то, что код не проверен - ясно из невалидного синтаксиса.

В общем, марш в школу :)

[Удален]
#10

dkameleon, послушайте умник, хотя не, уважаемый(репа-та огого) умник, великий знаток JSа, не пишите пожалуйста больше ересь, ну пожалуйста. я же за вас беспокоюсь, засмеют ведь. "отмена ивента", "анонимные функции", какие умные слова-то знаете, и судя по всему, это вы любите пальцы растопыривать. сорри за офтоп.

12

Авторизуйтесь или зарегистрируйтесь, чтобы оставить комментарий