Синхронно, асинхронно... не могу организовать логику
Столкнулся с проблемой ajax запросов.
Суть в том, что нужно останавливать js скрипт при определенных запросах, но с возможностью прервать запрос, если сервер тупит.
К примеру, пользователь печатает пост. Ну и отошел он от компа. Кука его скончалась. Он возвращается, допечатывает пост и отправляет.
В php я уже огранизовал повторную авторизацию с промежуточным хранилищем введенных пользователем данных. Если у пользователя кончилась кука пока он набирал пост, то его перекинет на форму авторизации, и если он верно введет логин/пароль, то его опять перекинет на форму, где он печатал свой пост. В форме естественно все будет на месте.
Так вот, решил сделать тоже самое но на стороне клиента. То есть, если кука кончилась, выскакивает окошко, где пользователь вводит логин/пароль, и если все ОК, то он просто остается там где и был.
Проблема в чем собственно... логика такая:
1. пользователь нажимает по кнопке "отправить"
2. скрипт перехватывает submit и отправляет запрос на сервер
3. сервер отвечает активен сеанс пользователя или нет.
Вот тут первая проблема: нужно ждать ответа сервера, чтобы решить - дать отправить форму или нет. То есть вернуть false и форма не отправится, или вернуть true и форма поедет на сервер.
Если использовать асинхронный запрос, то ничего не получается, так как скрипт не ждет ответа. Если использовать синхронный, то скрипт ждет, но и оборвать такой запрос не получается почему-то.
Пробовал в php прописать sleep(10), а в js сделать abort() через 3 секунды - не работает, браузер висит 10 секунд.
Едем дальше...
4. получили ответ от сервера - сеанс пользователя кончился.
5. делаем еще один запрос - просим у сервера форму авторизации в виде HTML строки.
6. получаем форму, накидываем тень и выводим форму - подписываемся на submit
7. перехватываем submit, отправляем данные на сервер и опять ждем...
Ну вообщем как-то так. С синхронными запросами все работает... если все работает на сервере. Но почему abort() не прерывает синхронный запрос?
Может есть другой вариант остановить js скрипт в ожидании ответа сервера, с возможностью прервать запрос и продолжить выполнение?
|