$ .post () не успевает запустить? - PullRequest
3 голосов
/ 07 февраля 2009

Я пытаюсь отправить данные из формы во внешний сценарий перед отправкой формы, но я не могу получить данные для доступа к внешнему сценарию, если я не return false; на самой форме.

$(document).ready(function () {

  // Handle Form-Submission
  $("#mainForm").submit(function () {

    // Reset Error Array
    errors = new Array();

    /* Validation Code Removed - Not Relevant */        

    // Check if errors exist
    if (errors.length > 0) {
      return false;
    } else {
      $("div.errors").html("");
      $.post("post.php",{
        "First Name": name_first.val(),
        "Last Name": name_last.val(),
        "Home State": home_state.val(),
        "Primary Email": email_primary.val()
      });
    }
    return false; /* Remove this line, and the $.post won't work. */
  });
});

Ответы [ 2 ]

8 голосов
/ 07 февраля 2009

Я столкнулся с точно такой же проблемой сегодня. Как говорит Марк, это потому, что вызов ajax асинхронный. Самое простое решение - сделать его синхронным.

Используйте .ajaxSetup () перед любыми вызовами ajax, например:

$.ajaxSetup({async: false});
2 голосов
/ 24 января 2010

Отправка в две конечные точки

Я бы попробовал что-то подобное вместо использования async: true. Хотя это заметно сложнее, он не заморозил бы интерфейс.

 $(document).ready(function(){           
  // Handle Form-Submission
 $("#mainForm").submit(function(e){  
    e.preventDefault();
    var $form = $(this);

    if($form.data('submitting')) return; // Avoid double submissions
    $(':submit').attr('disabled','disabled'); // Disable the submit button

    // Reset Error Array
    errors = new Array();

    /* Validation Code Removed - Not Relevant */        

    // Check if errors exist
    if (errors.length > 0) {;
      $(':submit').removeAttr('disabled'); // Enable the submit button
      return false;
    } else {
      $("div.errors").html("");
      $form.data('submitting',true); // Flag that a submission has started
      $.post("post.php",{
        "First Name":name_first.val(),
        "Last Name":name_last.val(),
        "Home State":home_state.val(),
        "Primary Email":email_primary.val()},
        function(){
          // remove our special handler and submit normally
          $form.unbind('submit').submit();
        }
      );
    }
  });
});

Оригинальный ответ

Похоже, что вы зависаете в том, что вы хотите использовать $.post, если JavaScript включен, но пусть форма работает нормально с отключенным JavaScript.

Однако, поскольку ни один из ваших JavaScript не будет работать, если он отключен , вам не нужно беспокоиться об изменении поведения в функции submit.

Вы можете просто оставить заявление return false;, или использовать

$("#mainForm").submit(function(e){  
  // all your existing code

  e.preventDefault();
}

Это будет препятствовать отправке формы в обычном режиме и вместо этого будет использовать ваш метод $.post, когда JavaScript включен . Если оно отключено , оно будет отправлено нормально.

preventDefault предпочтительнее, чем return false, если вы хотите, чтобы всплывающее окно событий продолжалось как обычно, но не позволяло продолжению действия браузера по умолчанию. return false эквивалентно звонку e.preventDefault(); e.stopPropagation();

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