
26.12.2019, 12:06
|
Аспирант
|
|
Регистрация: 22.09.2016
Сообщений: 40
|
|
Как при попытке отправить форму валидировать её с помощью ajax?
Форма при попытке её отправить посылает ajax запрос. Если запрос возвращает "ок", форма отправляется, иначе выводит в alert то что вернул ajax запрос.
allow_submit = false;
$('#new_item_form').on('submit', function (e) {
if(allow_submit == false){
$.post(
'ajax_unique_name.php',
{
name: $('#input_name').val()
}
).done(function(data) {
if(data == 'ok'){
allow_submit = true;
}else{
alert(data);
}
}).done(function() {
if(allow_submit == true){
$('#new_item_form').submit();
}
});
return false;
}else{
return true;
}
});
Почему-то когда ajax возвращает "ok", форма не отправляется сразу, а только при следующей попытке её отправить. Как сделать чтобы форма в этом случае сразу отправлялась?
|
|

26.12.2019, 13:32
|
 |
Профессор
|
|
Регистрация: 20.12.2009
Сообщений: 1,714
|
|
Сообщение от raja
|
Форма при попытке её отправить посылает ajax дополнительный POST-запрос. Если запрос возвращает "ок", форма отправляется, иначе выводится в alert то, что вернул ajax запрос ответ от сервера.
|
Да, ваш код действительно это делает уже сейчас, при условии, что сервер действительно правильно отвечает!
Сообщение от raja
|
Почему-то когда ajax сервер возвращает "ok", форма не отправляется сразу, а только при следующей попытке её отправить. Как сделать чтобы форма в этом случае сразу отправлялась?
|
Предоставленный код отправляет форму сразу в случае получения положительного ответа от сервера. Кстати ваш код можно изменить... (function() {
var isAllowedToSubmit = false;
$("#new_item_form").on("submit", function(event) {
if(isAllowedToSubmit) return true;
event.preventDefault();
$.post("ajax_unique_name.php", {
name: $("#input_name").val()
}).done(function(data) {
if(data === "ok") {
isAllowedToSubmit = true;
$("#new_item_form").submit();
isAllowedToSubmit = false;
} else {
alert(data);
}
});
});
})();
Не используйте слово «ajax» для обозначения случайных вещей, сложно понимать людей, которые используют выражение «асинхронный JavaScript и XML» для обозначения совершенно других вещей!
Последний раз редактировалось Malleys, 26.12.2019 в 13:37.
|
|

27.12.2019, 16:42
|
Аспирант
|
|
Регистрация: 22.09.2016
Сообщений: 40
|
|
Ваш код тоже не отправляет форму при корректном ответе сервера. Файлы прикладываю.
Ваш код тоже не отправляет форму при корректном ответе сервера. Файлы прикладываю. Приложите пожалуйста файлы с вашими рабочими кодами.
|
|

27.12.2019, 16:54
|
Профессор
|
|
Регистрация: 14.01.2015
Сообщений: 12,989
|
|
raja, нахрена же ее отправлять дважды, один раз чтобы проверить, а второй раз чтобы получить, если достаточно принять, проверить и либо сохранить и т.п., либо отвергнуть и вернуть ошибку?
|
|

27.12.2019, 17:27
|
 |
Профессор
|
|
Регистрация: 20.12.2009
Сообщений: 1,714
|
|
Сообщение от laimas
|
нахрена же ее отправлять дважды, один раз чтобы проверить, а второй раз чтобы получить, если достаточно принять, проверить и либо сохранить и т.п., либо отвергнуть и вернуть ошибку?
|
Например, чтобы проверить, есть ли такой пользователь, и в зависимости от наличия, показать «валидность» поля ввода имени.
Сообщение от raja
|
Ваш код тоже не отправляет форму при корректном ответе сервера. Файлы прикладываю. Приложите пожалуйста файлы с вашими рабочими кодами.
|
Так у вас в ajax.php нет никакого скрипта... но это не важно... там всегда «ok»
Ваш код тоже работает, если... <input id="new_item" type="submit" name="submit" value="Отправить">
заменить на <button>Отправить</button>
|
|

27.12.2019, 17:48
|
Профессор
|
|
Регистрация: 14.01.2015
Сообщений: 12,989
|
|
Сообщение от Malleys
|
Например, чтобы проверить, есть ли такой пользователь
|
А я то не знал дурак, вот только это делается на по отправлению формы, а по изменению в поле формы.
|
|

27.12.2019, 17:57
|
 |
Профессор
|
|
Регистрация: 20.12.2009
Сообщений: 1,714
|
|
Сообщение от laimas
|
А я то не знал дурак
|
Может не стоит делать поспешных выводов, судя по накатанным простыням в соседней теме, вы однозначно представляете другую разновидность социальных животных!
Сообщение от laimas
|
вот только это делается на по отправлению формы, а по изменению в поле формы.
|
Да, именно так! Однако, что... Нитки кончились?
|
|

27.12.2019, 18:26
|
Профессор
|
|
Регистрация: 14.01.2015
Сообщений: 12,989
|
|
Сообщение от Malleys
|
Да, именно так!
|
Ну тогда чем смущает вас то, что я написал, руки чешутся дать пояснение когда требуется? Ну так я это и так знаю. Но по коду представленному форму именно отправляют, а значит резонно - нахрена ее отправлять дважды?
|
|

27.12.2019, 19:49
|
 |
Профессор
|
|
Регистрация: 20.12.2009
Сообщений: 1,714
|
|
Сообщение от laimas
|
Но по коду представленному форму именно отправляют, а значит резонно - нахрена ее отправлять дважды?
|
Если её нужно было просто отправить, то не нужен никакой скрипт. Форма так и так работает!
А то, что её проверяют, это значит, что проверяют по изменению в поле формы, просто нам может показали упрощённый вариант... Иначе это всё бессмысленно, поскольку форма так и так отправляется.
Но с другой стороны может мы имеем дело с адептом AJAX... поскольку этим термином были названы — POST-запрос, сервер и ответ от сервера! Также этим термином был назван файл, который содержит слово «ок». Удивительнейшая логика! Тогда всё становится понятно — ему нужно больше AJAX!
Эта догматика ( AJAX), как я понимаю, предполагает, что всё одно, и всё во всём...
Последний раз редактировалось Malleys, 27.12.2019 в 19:56.
|
|

27.12.2019, 21:17
|
Профессор
|
|
Регистрация: 14.01.2015
Сообщений: 12,989
|
|
Сообщение от Malleys
|
Но с другой стороны может мы имеем дело с адептом AJAX...
|
Слава богу, что вы у нас не адепт. Можно сколько долго говорить умные слова, но не понять чего вы тут вдвоем обсуждали, если
$('#new_item_form').on('submit'
и
done(function() { if(allow_submit == true){ $('#new_item_form').submit();
это уже абсурд в контексте вопроса, как отправить форму по разрешению, и это после того как она уже была на сервере. Но тем не менее весь контекст вашего обсуждения так и продолжается с этим же абсурдом.
А что ему надо, я не знаю, но если даже на клиенте и сделать по уму, но при этом сервер возьмет на веру, то все это все равно гроша не будет стоить.
|
|
|
|