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

Не понятна работа при отправке формы на валидацию
Почему возвращает всегда is_need_submit = false; тем не менее работает.

Если поле пустое то ajaxcheck.php возвращает как задумано строку ошибки "Поле логин не может быть пустым". Выводим ошибку в div#errorMsg". Задаем is_need_submit = false – запрет отправки формы к check.php. Alert показывает false как и ожидалось.

Если в поле не пустое, ajaxcheck.php возвращает “OK”, присваиваем is_need_submit = true;
Но alert все равно показывает false, а должен true. Да и форма тем не менее отправляется в check.php, значит реально is_need_submit все-таки true.

Просьба кто знает, подскажите в чем загвоздка?

Коды
1. Файл с формой:
header('Content-type: text/html; charset=utf-8');

<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">

<html xmlns="http://www.w3.org/1999/xhtml">
<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>
</html>


2. Файл 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-строку и строку обратно скрипту signup.js
 } else {
   echo "OK";
 }


3. Файл signup.php
$(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' ) {
	            is_need_submit = true;
	        } else {
				errStr = JSON.parse (msg);       
				msgErrArea = $('#errorMsg');        // div для вывода сообщений ошибок
                msgErrArea.empty();                 // очищаем содержимое элемента div#errorMsg
                msgErrArea.append(errStr).show();	// отображаем сообщение о соответствующей ошибке (выводим ответ php сюда)
               	is_need_submit = false;
		    }
	 }
   });

   alert('is_need_submit = ' + is_need_submit);
   return is_need_submit;

});
});


4. Файл check.php
echo "OK";
Ответить с цитированием