Javascript.RU

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

Как задать переменную в success
Ajax запрос, в зависимости от ответа сервера (файл валидации формы ajaxcheck.php), предполагалось возвращать переменную is_need_submit, значение которой определяло бы отправлять форму файлу check.php или просто вывод ошибок. Проблема,что is_need_submit всегда остается false. Кто знает подскажите, в чем проблема задать значение?
$(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 {
           is_need_submit = false;                                   
        }
    } 
   });
  alert('is_need_submit = ' + is_need_submit);
  return is_need_submit;
 
});
 
});
Ответить с цитированием
  #2 (permalink)  
Старый 15.05.2013, 13:44
Аватар для bret
Кандидат Javascript-наук
Отправить личное сообщение для bret Посмотреть профиль Найти все сообщения от bret
 
Регистрация: 04.10.2008
Сообщений: 128

Так ведь же ж ajax асинхронный, и вы возвращаете переменную до того, как получили ответ в success
Сразу возвращайте false, а если сервер вернёт true - запускайте отдельную функцию оправки формы
__________________
я подыскиваю мозг... твой подойдёт
Ответить с цитированием
  #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";
Ответить с цитированием
  #4 (permalink)  
Старый 15.05.2013, 17:39
Аспирант
Отправить личное сообщение для bartonom Посмотреть профиль Найти все сообщения от bartonom
 
Регистрация: 05.05.2011
Сообщений: 48

Ниже фрагмент неправильный, зацикливание по submit
$("#regform").submit(function() {
  var str = $(this).serialize();
 $.ajax (
   { 
     type: "POST",
     url: "ajaxcheck.php",
     data: str,
     success: function(msg) {
       if ( msg == 'OK' ) {
        $("#regform").submit();
        } else {
Ответить с цитированием
  #5 (permalink)  
Старый 15.05.2013, 17:43
Аспирант
Отправить личное сообщение для bartonom Посмотреть профиль Найти все сообщения от bartonom
 
Регистрация: 05.05.2011
Сообщений: 48

Задачу решил так, спасибо всем кто откликнулся
$(document).ready(function(){
  
function sendForm() {
  $("#regform").submit();
  return false;
}

$('#btnsend').click(function() { 
  var str = $('#regform').serialize();
 $.ajax (
   { 
     type: "POST",
     url: "ajaxcheck.php",
     data: str,
     success: function(msg) {
       if ( msg == 'OK' ) {
       sendForm();
	   } else {
           err = JSON.parse (msg);        // сообщение с ошибкой
           msgErrArea = $('#errorMsg');   // div для вывода сообщения ошибки
           msgErrArea.empty();            // очищаем содержимое div#errorMsg
           msgErrArea.append(err).show(); // отображаем сообщение ошибки
        }
    } 
   });
  return false;
 
});

});
Ответить с цитированием
  #6 (permalink)  
Старый 15.05.2013, 18:28
Аватар для bret
Кандидат Javascript-наук
Отправить личное сообщение для bret Посмотреть профиль Найти все сообщения от bret
 
Регистрация: 04.10.2008
Сообщений: 128

А если пользователь отправит формуу кнопочкой Enter?
__________________
я подыскиваю мозг... твой подойдёт
Ответить с цитированием
  #7 (permalink)  
Старый 15.05.2013, 18:57
Аспирант
Отправить личное сообщение для bartonom Посмотреть профиль Найти все сообщения от bartonom
 
Регистрация: 05.05.2011
Сообщений: 48

Сообщение от bret
А если пользователь отправит формуу кнопочкой Enter?
Проверил, но как ни странно по Enter то же ожидаемое поведение.
Ответить с цитированием
Ответ



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

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


Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
setInterval как передать переменную в функцию kamushek Общие вопросы Javascript 6 02.09.2011 23:53
Как в метод slice вместо числа подставить переменную leny Ваши сайты и скрипты 15 07.07.2011 23:06
Подскажите как вставить переменную в RegExp c модификаторами Дмитрий-Solod Общие вопросы Javascript 2 16.11.2010 19:30
помогите задать переменную в js bsgroupua Общие вопросы Javascript 3 01.02.2010 18:28
Как обозначить переменную выбранную в FileChooser? woo_hoo Общие вопросы Javascript 4 03.07.2008 12:58