Как использовать обратный вызов ajax, чтобы определить, когда отправлять форму - PullRequest
0 голосов
/ 29 марта 2012

Я хочу изменить форму, используя javascript (после того, как пользователь нажал кнопку отправки), прежде чем отправить ее. Действие включает вызов ajax, который должен завершиться до того, как я отправлю форму. Проблема в том, что обработчик событий submit завершит выполнение и вернет false до завершения работы ajax, и я не смог выяснить, как отправить форму после завершения ajax. Хотя я знаю, что есть какой-то другой способ сделать это, но я хочу знать, если есть, как это можно сделать таким образом. Благодаря.

$("form#profile").submit(function() {
    var dept;
    if (IsEmpty($("input[name=dept_id1]").val())) {
        return true;
    } else {
        dept = $("input[name=dept_id1]").val();
        $.post("funcs.php", {dept:dept}, function(d) {
            $("select[name=dept_id]").val(d);
            // It is at this point that I want to submit the form
            return true;
        });
    }
    return false;
});

Ответы [ 4 ]

2 голосов
/ 29 марта 2012
$("form#profile").submit(function() {
    var dept;
    if (IsEmpty($("input[name=dept_id1]").val())) {
        return true;
    } else {
        dept = $("input[name=dept_id1]").val();
        $.post("funcs.php", {dept:dept}, function(d) {
            $("select[name=dept_id]").val(d);
            // It is at this point that I want to submit the form

            // unbind your submit handler
            $("form#profile").unbind('submit');

            // Optionally bind a new handler here

            // Submit it with no handler or new handler
            $("form#profile").submit();

            return true;
        });
    }
    return false;
});

Также обратите внимание, что вместо $("form#profile") вы должны использовать $("#profile"), поскольку это более быстрый селектор, и, поскольку идентификаторы должны быть уникальными, он выберет тот же элемент.

1 голос
/ 29 марта 2012

Вы можете сделать это с помощью jquery event.preventDefault ().

http://api.jquery.com/event.preventDefault/

Блокирует событие от запуска. Затем вы можете делать все, что вам нужно, и, наконец, продолжить публикацию с $ .post

Вот пример (взят с сайта jquery):

/* attach a submit handler to the form */
$("#searchForm").submit(function(event) {

    /* stop form from submitting normally */
    event.preventDefault(); 

    /* get some values from elements on the page: */
    var $form = $( this ),
        term = $form.find( 'input[name="s"]' ).val(),
        url = $form.attr( 'action' );

    /* Send the data using post and put the results in a div */
    $.post( url, { s: term },
      function( data ) {
          var content = $( data ).find( '#content' );
          $( "#result" ).empty().append( content );
      }
    );
  });

Подробнее здесь: http://api.jquery.com/jQuery.post/#example-8

0 голосов
/ 29 марта 2012
0 голосов
/ 29 марта 2012

То, что вы хотите сделать, это использовать async: false в вашем вызове jquery ajax. Вы не можете сделать это с $.post, но на самом деле вам нужно использовать $.ajax. Примерно так:

var d = $.ajax({
            type: 'POST',
            async: false,
            url:    "funcs.php",
            data:   "dept="+dept,
        }).responseText;

$("select[name=dept_id]").val(d);
return true;
...