![]() |
Модераторы: Sardar, Aliance |
![]() ![]() ![]() |
|
Niko8D |
|
||||
Новичок Профиль Группа: Участник Сообщений: 24 Регистрация: 23.11.2009 Репутация: нет Всего: нет |
Добрый день.
Не могу разобраться с ajax. При помощи ajax, я делаю проверку в базу на наличия повторения ФИО, если в базе такое ФИО есть, то ajax возвращает 1, а иначе 0. И так проверка происходит при нажатии кнопки submit (т.е. при отправки формы), в случаи если ajax возвращает 1, отправка формы останавливается, проблема в том ято я не могу остановить отправку формы, по идеи отправка формы должна происходить при команде "return false", но в теле ajax эта команда не срабатывает, а если попытаешься вывести результат работы ajax за тело, то остановка формы все ровно не происходит (я так понял из-за того, что ajax отрабатывается в самом конце работы скрипта). Кто может мне подсказать, как мне остановить отправку формы в зависимости от полученного результата от ajax. 1. Вариант (попытка остановки формы вне тела ajax):
2. Вариант ((попытка остановки формы в теле ajax)
P.S. Я понимаю есть скорей всего другие варианты, но вначале я хочу понять, если есть возможность остановки отправки формы в моем случаи. |
||||
|
|||||
ksnk |
|
|||
![]() прохожий ![]() ![]() ![]() ![]() Профиль Группа: Комодератор Сообщений: 6855 Регистрация: 13.4.2007 Где: СПб Репутация: 48 Всего: 386 |
Начиная с версии 1.5 $.ajax выдает объект, похожий на XMLHttpRequest. У этого объекта, в том числе, есть метод abort.
Так что что-то вроде
Это сообщение отредактировал(а) ksnk - 13.10.2015, 11:06 -------------------- Человеку свойственно ошибаться, программисту свойственно ошибаться профессионально ! ![]() |
|||
|
||||
Sartorius |
|
|||
![]() Эксперт ![]() ![]() ![]() Профиль Группа: Завсегдатай Сообщений: 1568 Регистрация: 18.7.2006 Где: Ivory tower Репутация: нет Всего: 37 |
ksnk, у него наверно input c type="submit". Можно попробовать в обработчике false возвращать в случае ошибки валидации. AJAX запрос должен быть синхронным.
http://stackoverflow.com/questions/4227043...n-onclick-event Это сообщение отредактировал(а) Sartorius - 13.10.2015, 11:14 |
|||
|
||||
ksnk |
|
||||
![]() прохожий ![]() ![]() ![]() ![]() Профиль Группа: Комодератор Сообщений: 6855 Регистрация: 13.4.2007 Где: СПб Репутация: 48 Всего: 386 |
Sartorius,
![]() О том: Как ставится обработчик на форму? Если явно прописывается в форме - то что-то вроде такого должно быть
Таким образом - форма будет посылаться всегда только ajax'ом. Возможно вызов функции можно переписать так
Только смысл validat.php должен быть другой - не проверить, можно ли вставить юзера в таблицу юзеров, а проверить, и если можно - сразу вставить, если нельзя - сообщить почему. -------------------- Человеку свойственно ошибаться, программисту свойственно ошибаться профессионально ! ![]() |
||||
|
|||||
Niko8D |
|
||||
Новичок Профиль Группа: Участник Сообщений: 24 Регистрация: 23.11.2009 Репутация: нет Всего: нет |
Добавлено через 9 минут и 32 секунды Мне для решения задачи, нужно решить одну из двух задач: 1. Почему в теле ajax не отрабатывается функция return false (функция которая останавливает отправку формы). 2. Как сделать так, чтобы ajax не отрабатывался в конце скрипта. Это сообщение отредактировал(а) Niko8D - 13.10.2015, 14:41 |
||||
|
|||||
ksnk |
|
|||
![]() прохожий ![]() ![]() ![]() ![]() Профиль Группа: Комодератор Сообщений: 6855 Регистрация: 13.4.2007 Где: СПб Репутация: 48 Всего: 386 |
Можно и так:
-------------------- Человеку свойственно ошибаться, программисту свойственно ошибаться профессионально ! ![]() |
|||
|
||||
Niko8D |
|
||||
Новичок Профиль Группа: Участник Сообщений: 24 Регистрация: 23.11.2009 Репутация: нет Всего: нет |
Не так не пойдет, отправка формы всегда будет останавливатся. У меня в первом варианте описан подобный метод, но проблема в том, что ajax отрабатывается в конце скрипта, по этому условие
не отрабатывается как надо. Вот первый вариант:
Это сообщение отредактировал(а) Niko8D - 14.10.2015, 09:17 |
||||
|
|||||
ambi |
|
|||
Unregistered |
Товарищ, а вы в курсе, что такое асинхронные запросы? Как только сможете ответить внятно на этот вопрос, все ваши вопросы решатся.
Этот ответ добавлен с нового Винграда - http://vingrad.com |
|||
|
||||
ambi |
|
|||
Unregistered |
В общем, я не совсем понимаю, зачем вы зациклились именно на остановке отправки формы? Один из логичных вариантов проверки, на мой взгляд, который используется повсеместно -- вешать на поле ввода этого ФИО обработчик на ввод с таймаутом, который будет через ajax отсылать запрос на сервер на проверку этого ФИО. Результат будет выводиться под полем соответствующей надписью. Даже если пользователь заполнит все остальные поля раньше, а ФИО заполнит в последнюю очередь и успеет нажать submit формы до истечения таймаута той функции -- в любом случае, нужно будет делать отдельную проверку на бэкенде.
Этот ответ добавлен с нового Винграда - http://vingrad.com |
|||
|
||||
Niko8D |
|
|||
Новичок Профиль Группа: Участник Сообщений: 24 Регистрация: 23.11.2009 Репутация: нет Всего: нет |
Уважаемый ambi, я не вижу смысла усложнять скрипт, по моему мой вариант проще не куда, единственное его надо немного доработать.
|
|||
|
||||
ksnk |
|
||||
![]() прохожий ![]() ![]() ![]() ![]() Профиль Группа: Комодератор Сообщений: 6855 Регистрация: 13.4.2007 Где: СПб Репутация: 48 Всего: 386 |
Ну, дык! Этот error сменит свое значение только после отработки ajax'а. Совсем в другое время. Так что возвращаемое из функции значение всегда будет не false. Вариантов решения несколько. Можно сделать асинхронный запрос и сразу получить ответ, прямо в этой же функции. Можно отправить форму уже после получения ответа от сервера.
-------------------- Человеку свойственно ошибаться, программисту свойственно ошибаться профессионально ! ![]() |
||||
|
|||||
Niko8D |
|
|||
Новичок Профиль Группа: Участник Сообщений: 24 Регистрация: 23.11.2009 Репутация: нет Всего: нет |
Форма останавливается, но только в случаи успеха форма не отправляется(
Это сообщение отредактировал(а) Niko8D - 15.10.2015, 11:40 |
|||
|
||||
Niko8D |
|
|||
Новичок Профиль Группа: Участник Сообщений: 24 Регистрация: 23.11.2009 Репутация: нет Всего: нет |
Форма на самом деле отправляется но только через 10с, почему?
Это сообщение отредактировал(а) Niko8D - 15.10.2015, 12:46 |
|||
|
||||
ksnk |
|
|||
![]() прохожий ![]() ![]() ![]() ![]() Профиль Группа: Комодератор Сообщений: 6855 Регистрация: 13.4.2007 Где: СПб Репутация: 48 Всего: 386 |
Отлаживать нужно. Поставить console.log во все значимые строки - начало функции call , получение данных от сервера, вызов submit'а формы.
-------------------- Человеку свойственно ошибаться, программисту свойственно ошибаться профессионально ! ![]() |
|||
|
||||
Niko8D |
|
|||
Новичок Профиль Группа: Участник Сообщений: 24 Регистрация: 23.11.2009 Репутация: нет Всего: нет |
Причем она уходит только в том случаи, когда в ajax добавляешь параметр
Это сообщение отредактировал(а) Niko8D - 15.10.2015, 15:26 |
|||
|
||||
Niko8D |
|
||||||||||||
Новичок Профиль Группа: Участник Сообщений: 24 Регистрация: 23.11.2009 Репутация: нет Всего: нет |
Что-то странное происходит, поставил console.log перед
В консоле происходит какой-то цикл, который выводит 975 раз
(там еще ошибка появляется в конце, но я не успеваю ее разглядеть, так как форма отправляется, соответственно страница обновляется) естественно это занимает какое-то время и далее форма отправляется. Если убераеш парамент
то цинкл идет до бесконечности. Добавлено через 13 минут и 26 секунд Console.log выводит интересные результвты. Console.log я поставил перед стракой отправки формы
Консоль выводит цикл и при каждом выводе выводит строку
Цикл бесконечный, но как только в ajax устанавливаешь параметр
цикл обрывается на 975 выводе. Вот такая ерунда, почему так происходит я не понимаю. |
||||||||||||
|
|||||||||||||
Niko8D |
|
||||||
Новичок Профиль Группа: Участник Сообщений: 24 Регистрация: 23.11.2009 Репутация: нет Всего: нет |
Console.log выводит интересные результвты. Console.log я поставил перед стракой отправки формы
Консоль выводит цикл и при каждом выводе выводит строку
Цикл бесконечный, но как только в ajax устанавливаешь параметр
цикл обрывается на 975 выводе. Вот такая ерунда, почему так происходит я не понимаю. |
||||||
|
|||||||
ksnk |
|
|||
![]() прохожий ![]() ![]() ![]() ![]() Профиль Группа: Комодератор Сообщений: 6855 Регистрация: 13.4.2007 Где: СПб Репутация: 48 Всего: 386 |
Мне казалось, что явный вызов submit() не вызывает обработчик onsubmit. Возможно теперь это уже не так.
Можно так изменить обработчик - добавить переменную `call.gone`. По значению переменной - вызывать $.ajax еще раз или не вызывать.
-------------------- Человеку свойственно ошибаться, программисту свойственно ошибаться профессионально ! ![]() |
|||
|
||||
Niko8D |
|
|||
Новичок Профиль Группа: Участник Сообщений: 24 Регистрация: 23.11.2009 Репутация: нет Всего: нет |
Что самое интересное, если этот скрипт вынести отдельно, например в отдельный файл (в чистый файл не связанный с проектом), то он работает нормально (т.е. без зацикливания). Сейчас буду разбератся, в чем причина зацикливания.
|
|||
|
||||
Niko8D |
|
|||
Новичок Профиль Группа: Участник Сообщений: 24 Регистрация: 23.11.2009 Репутация: нет Всего: нет |
Теперь мне все понятно. Как выше было сказано. Проблемы в версии jqury. В версии jQuery 1.2.6 работает нормально, а в версии jQuery v1.8.2 отправка формы зацикливеатся.
|
|||
|
||||
![]() ![]() ![]() |
0 Пользователей читают эту тему (0 Гостей и 0 Скрытых Пользователей) | |
0 Пользователей: | |
« Предыдущая тема | JavaScript: для новичков | Следующая тема » |
|
По вопросам размещения рекламы пишите на vladimir(sobaka)vingrad.ru
Отказ от ответственности Powered by Invision Power Board(R) 1.3 © 2003 IPS, Inc. |