2012-06-22 4 views
0
$('form').submit(function() { 
    $.post(url, $(this).serialize(), 'validate'); 
    return .....; 
}); 

function validate(data) { 
    return data; 
} 

Мне нужно вернуть из функции отправки результат, который выполняет validate() (данные). Как мне это сделать? Как сделать возврат отправки ожидающим, пока ajax не вернет результат?Возврат из функции с возвращаемым значением обратного вызова (вложенные функции)?

+0

Параметр 'Validate)' функция (в '$ .post' пожаров только после того, как AJAX запрос был успешно завершен. То, что вы сделали, правильно. Теперь в чем проблема, с которой вы сталкиваетесь? –

ответ

0

Вы не можете этого сделать, потому что это асинхронно.

Вы можете сделать это:

$('form').submit(function(e) { 
    var form = this; 
    e.preventDefault(); //Prevent the form from submitting 

    $.post(url, $(this).serialize(), function(data){ 
     if(validate(data)) { 
      form.submit(); //Now submit the form. Please note `form` is not a jQuery object the event handler is not triggered. 
     } 
    }); 
}); 
+1

Не будет form.submit() снова вызвать анонимную функцию и, следовательно, снова запустить запрос ajax? –

+0

@ ГеоргиГеоргиев 'form.submit()' вызывает собственный метод отправки формы, так как 'form' является элементом DOM, а не объектом jQuery. Если бы это был объект jQuery, вы были бы правы, потому что вызов 'submit()' в объекте jQuery инициирует событие jQuery + вызывает собственный метод 'submit'. – Esailija

0

Да, метод выглядит запутанным. Может быть, вы должны инициализировать переменную False во время загрузки страницы и установить ее в true, после того как функция validate вернет успешные данные. Он может быть установлен внутри условной, как это:

$('form').submit(function(e) { 
    if (!postflag) { 
     e.preventDefault(); 
      $.post("foo.php",serialize(),function(data) { 
        if (validate(data)) { 
          postflag = true; 
        } 
      }); 
     } 
    if (postflag) { 
     $(this).submit(); 
    }   
    }); 
Смежные вопросы