Отправить форму изнутри ajax success функции, которая проверяет значения - PullRequest
4 голосов
/ 23 июня 2011

Я видел около 20 или более постов на эту тему, но они либо не имеют смысла для меня, либо немного отличаются.

Это также довольно простой сценарий.У меня есть форма, когда она отправляется, я делаю ajax-вызов, чтобы узнать, не забрал ли письмо другой пользователь.Если не принято, я хочу отправить форму, если она есть, не отправляйте форму.

Вот HTML

<form id='greatForm' action='godothat.php' method='post'>
<input type='submit' id='email'>
<button>Send</button>
</form>

JS

$('#greatForm').submit(function(){


        // GET THE VARS
        var email = $('#email').val();


         $.ajax({ 
            data: { 'field1' : email  },
            type: 'GET', 
            dataType: 'json',
            url: 'url.php',
            beforeSend : function(){   },
            success: function(answer){   
                if(answer.error === false){
                         // Submit this form without doing the ajax call again
                } 
                if(answer.error === true){
                    // Not ok, don't submit this form
                }
            }
        });                               

        return false;   
    });

Спасибоза любую помощь.

** ОБНОВЛЕНИЕ ** Возможно, я не правильно сформулировал это.Я имею в виду, что если answer.error === false имеет значение true, функция submit должна возвращать значение true.

Таким образом, при завершении AJAX, если answer.error равен false, отправка должна быть истинной, и наоборот ...

Имеет ли это больше смысла?

Ответы [ 4 ]

7 голосов
/ 23 июня 2011
$('#greatForm').submit(function(){
    if(!$(this).attr('validated'))
    {
     // GET THE VARS
     var email = $('#email').val();


      $.ajax({ 
        data: { 'field1' : email  },
        type: 'GET', 
        dataType: 'json',
        url: 'url.php',
        beforeSend : function(){   },
        success: function(answer){   
            if(answer.error === false){
                   $('#greatForm').attr('validated',true);
                   $('#greatForm').submit();
            } 
            if(answer.error === true){
                //display the errors
            }
        }
     });
     return false;  
    }                            
   return true;
});

Это должно сработать, вы просто добавляете проверенное свойство в форму, если оно уже проверено.И вы проверяете форму, только если атрибут не задан заранее, в противном случае вы отправляете.

5 голосов
/ 23 июня 2011

Попробуйте удалить обработчик события submit перед повторной отправкой формы:

if(answer.error === false){
    // Submit this form without doing the ajax call again
    $('#greatForm').unbind().submit();
}
1 голос
/ 20 января 2013

Если я правильно понял, вам нужно echo treu / false от вашего php.url Пример:

$.ajax({

    type: 'POST',
    url: 'url.php',
    data: $("#your_form").serialize(),
    success: function(data) {
    if (data=='true') {                         
        ... 
    } else {

и в url.php

echo "true"; 
echo "false";
1 голос
/ 23 июня 2011

Технически, вы можете сделать это "отправить", просто вернув true.Браузер завершит свою обычную процедуру отправки формы.Однако, если вы хотите сделать это с AJAX, вам нужно сделать еще один вызов AJAX для отправки формы.Каждый запрос является своей собственной сущностью.Это не держит соединение открытым для вас.

Однако @Dogbert прав.Этот тип вещей должен быть выполнен на стороне сервера, как только данные формы будут обработаны там.Если вы делаете это с AJAX, вы все равно можете использовать возвращенный ответ, чтобы уведомить пользователя о любых ошибках, но вы должны ожидать, что они снова отправят форму после внесения необходимых исправлений.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...