Сообщение от bret
|
Так ведь же ж ajax асинхронный, и вы возвращаете переменную до того, как получили ответ в success
Сразу возвращайте false, а если сервер вернёт true - запускайте отдельную функцию оправки формы
|
То есть событие submit происходит, запрос себе отправляется, в это время функция (в submit) не дожидаясь ответа запроса спокойно возвращает false. Запрос прошел удачно, генерируется success, проверяю что в ответе сервера получено OK и генерирую отправку формы используя $("#regform").submit(); Все ли правильно я понял?
Потому что ошибку я получаю, а ответ после submit нет.
$(document).ready(function(){
var is_need_submit = false;
$("#regform").submit(function() {
var str = $(this).serialize();
$.ajax (
{
type: "POST",
url: "ajaxcheck.php",
data: str,
success: function(msg) {
if ( msg == 'OK' ) {
$("#regform").submit();
} else {
err = JSON.parse (msg); // сообщение с ошибкой
msgErrArea = $('#errorMsg'); // div для вывода сообщения ошибки
msgErrArea.empty(); // очищаем содержимое div#errorMsg
msgErrArea.append(err).show(); // отображаем сообщение ошибки
}
}
});
return false;
});
});
Файл с формой
<head>
<meta http-equiv="Content-Type" content="text/html; charset=utf-8" />
<title>ajax отправка формы</title>
<script type="text/javascript" src="js/jquery-1.9.1.js"></script>
<script type="text/javascript" src="js/signup.js"></script>
</head>
<body>
<div id="errorMsg" style="width:360px; margin: 10px auto"></div>
<form id="regform" name = "regform" method="post" action="check.php" >
<input type="text" name="login" id="login" value="" />
<button name="reg" type="submit" value="reg">Отправить</button>
</form>
</body>
Файл ajaxcheck.php
header('Content-type: text/html; charset=utf-8');
$err = "";
if (isset($_POST['login'])) { $username = $_POST['login']; }
if (empty($username)) {
$err = "Поле логин не может быть пустым";
echo json_encode( $err ); // $err в JSON-строку и echo отправляет эту строку обратно скрипту signup.js
} else {
echo "OK";
}
Файл check.php
echo "OK for";