Консультация № 180669
10.11.2010, 14:28
0.00 руб.
0 5 1
Привет, если это кто-то читает.

Не получается у меня соединить отмену отправки формы с аяксовым запросом.

В общем, задача такая: заблокировать отправку формы, пока не придёт ответ с сервера, а потом, по выполнении проверки данных сервером, разрешить отправку.

У меня скрипт не хочет дожидаться ответа от сервера и игнорирует return false. Т.е. отправляет форму без проверки и ожидания аяксовой работы.

ajax-php файл в этом примере делает так:
echo "OK";

Если же он выводит другую фразу, форма всё равно отправляется.
Как обхитрить?


Приложение:
$(document).ready(function() {
$(".myform").submit(function(){
$('.textdiv').load('/../ajax/script.php',{param: 'kakoj-to param'}, function (data,status) {
if (status!='error') {
if ($('.textdiv').html()=="OK") {
$(".myform").submit();
}
}
});
return false;
});
});

Обсуждение

Неизвестный
12.11.2010, 09:04
общий
это ответ
Здравствуйте, Прим Палвер!

возможно стоит непосредственно в форме прописать событие onSubmit и еще $('.textdiv').html()=="OK") я бы заменил на $('.textdiv').Text()=="OK")
если вы хотите то скиньте на Pavel-Ekt@yandex.ru ваши скрипты необходимые для работы данного кода и я постораюсь помоч!
Неизвестный
12.11.2010, 13:04
общий
Если вместо $(".myform").submit(function(){}) стоит, к примеру, $(".mydiv").click.(function(){}) , отправка и возврат данных внутри происходит без заминки. В том числе и замена $('.textdiv').html()

Т.е. не форма, не ссылка, а то, что не требует отмены return false

Форма имеет конструкцию

<form class="myform" method="post" action="#">
<div class="textdiv"></div>
<input type="submit" />
</form>

Это упрощённый кусок кода, как и js выше. Я вычленил именно то, что не получается.
Неизвестный
12.11.2010, 13:14
общий
Возможно стоит попробовать

<form class="myform" method="post" action="#" onSubmit="function(){$('.textdiv').load ... и т.д.">
<div class="textdiv"></div>
<input type="submit" />
</form>
Неизвестный
15.11.2010, 19:19
общий
Есло отправка осуществляется через кнопку, можно запретит кнопку до приезда ответа с сервера, а потом, если все ОК - разрешит кнопку.
Конечно, можно сперва кнопку отправки запроса вообще сделать невидимой, или построит кнопку runtime, после приезда AJAX ответа.

Кроме Этого, я смотрю Ваш код - Это не AJAX или мне не понятно как Ваш function выполняется после Load Вашего "textdiv"
Неизвестный
18.11.2010, 04:17
общий
возможно 1я проблема кода - в асинхронном режиме ajax-запроса на '/../ajax/script.php', т.к. отослав запрос серверу браузер отменяет отправку данных ('return false;'). А уже после этого получается ответ от сервера, изменяется textdiv и !внимание повторно вызывается метод submit, который повторяет ajax запрос.
Можете попробовать следующий код:
<script type="text/javascript">
function my_submit(){
$("#textdiv").AJAX({
async: 'FALSE', url: '/../ajax/script.php', dataType : "json", data: {param: 'kakoj-to param'},
success: function (data, status) {
win_ajax_status = status; // сохранение статуса ответа в глобальной переменной.
}});
if (win_ajax_status=='error' && $('#textdiv').text()!='OK') {
return false;
}
}
//-->
</script>

<form name='myform' ONSUBMIT="my_submit();">

Код работает так:
- перед отправкой формы производиться синхронный запрос ($.ajax (async: 'false', ...)) и после получения ответа от сервера сначала обновляется textdiv, и выполняется (функция) сохранение статуса ответа в win_ajax_status. Если win_ajax_status указывает на ошибку, либо сервер прислал что-то иное нежели "OK" то отменяется отправка всей формы.
Форма ответа