Javascript.RU

Создать новую тему Ответ
 
Опции темы Искать в теме
  #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";
Ответить с цитированием
  #2 (permalink)  
Старый 14.05.2013, 18:09
Аватар для keen
Профессор
Отправить личное сообщение для keen Посмотреть профиль Найти все сообщения от keen
 
Регистрация: 28.03.2012
Сообщений: 376

Главная > Форум » Javascript » AJAX, COMET, Node.JS
Ответить с цитированием
  #3 (permalink)  
Старый 14.05.2013, 18:27
Аспирант
Отправить личное сообщение для bartonom Посмотреть профиль Найти все сообщения от bartonom
 
Регистрация: 05.05.2011
Сообщений: 48

Сообщение от keen Посмотреть сообщение
Главная > Форум » Javascript » AJAX, COMET, Node.JS
Не уверен что правильно вас понял, но при попытке поместить return в success
if ( msg == 'OK' ) {
 return true;
} else {
 errStr = JSON.parse (msg);       
 msgErrArea = $('#errorMsg');        // div для вывода сообщений ошибок
 msgErrArea.empty();       // очищаем содержимое элемента div#errorMsg
 msgErrArea.append(errStr).show();	// отображаем сообщение 
 return false;
}

форма просто отправляется в любом случае.
Ответить с цитированием
  #4 (permalink)  
Старый 14.05.2013, 18:35
Аватар для keen
Профессор
Отправить личное сообщение для keen Посмотреть профиль Найти все сообщения от keen
 
Регистрация: 28.03.2012
Сообщений: 376

начнём с того что проверять пустоту строки отправкой на сервер - это идиотизм.
<button name="reg" type="submit" value="reg">Отправить</button>

->
<button id="btnsend" name="reg" type="submit" value="reg">Отправить</button>


ну и далее заменить с 4й строки на
$('#btnsend').click(function() {
	$.ajax({ 
		type: 'POST',
		url: 'ajaxcheck.php',
		data: { login: $('#login').val() },
// ...
	});
	return false;
Ответить с цитированием
  #5 (permalink)  
Старый 14.05.2013, 19:14
Аспирант
Отправить личное сообщение для bartonom Посмотреть профиль Найти все сообщения от bartonom
 
Регистрация: 05.05.2011
Сообщений: 48

Сообщение от keen Посмотреть сообщение
начнём с того что проверять пустоту строки отправкой на сервер - это идиотизм.
<button name="reg" type="submit" value="reg">Отправить</button>

->
<button id="btnsend" name="reg" type="submit" value="reg">Отправить</button>


ну и далее заменить с 4й строки на
$('#btnsend').click(function() {
	$.ajax({ 
		type: 'POST',
		url: 'ajaxcheck.php',
		data: { login: $('#login').val() },
// ...
	});
	return false;
Профессору не обязательно грубить равно как и отвечать. Никто не проверял пустоту. Все это в порядке упрощения подано. Нет желания вступать в перепалку вместо возможности получить помощь
Ответить с цитированием
  #6 (permalink)  
Старый 14.05.2013, 21:18
х.з
Посмотреть профиль Найти все сообщения от dmitriymar
 
Регистрация: 21.11.2010
Сообщений: 4,588

Сообщение от keen
начнём с того что проверять пустоту строки отправкой на сервер - это идиотизм.
да почему же ? это вобще то считается хорошим юзебилити когда пользователю сразу указывается на ошибку, и он не ждет ответа с сервера -вернитесь назад вы там данные не ввели , а если ещё и форму почистить при этом верха восторгу пользователя не будет

да и запросов к серверу меньше

Последний раз редактировалось dmitriymar, 14.05.2013 в 21:32.
Ответить с цитированием
Ответ



Опции темы Искать в теме
Искать в теме:

Расширенный поиск


Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
Работа в Москве, фуллтайм, от 70000 до 90000 Necros Работа 20 10.09.2012 21:27
Спам, работа с полями формы! nels22 Серверные языки и технологии 2 10.06.2012 15:37
Работа со свойства, при использовании fn.extend в jQuery Greck jQuery 1 27.07.2011 21:28
Открытие полей формы при выборе определенного radio rolph Events/DOM/Window 4 15.06.2010 18:32
Изменить стиль формы - бэкграунд при onmouseover petyaeva Элементы интерфейса 0 31.07.2009 11:31