Показать сообщение отдельно
  #3 (permalink)  
Старый 15.05.2013, 15:00
Аспирант
Отправить личное сообщение для bartonom Посмотреть профиль Найти все сообщения от bartonom
 
Регистрация: 05.05.2011
Сообщений: 48

Сообщение от 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";
Ответить с цитированием