JQuery отправляет форму и выводит ответ или сообщение об ошибке - PullRequest
0 голосов
/ 20 мая 2010

Я хочу отправить форму и показать сообщение о результате. update_records инициализирует alert_message сообщением об ошибке. В случае успеха я ожидаю, что его значение изменится. Чем update_records выводит сообщение. Но функция всегда предупреждает «Ошибка отправки формы». Что не так с этим?

Код следует:

  function update_records(form_name) {
    var options = {
      async: false,
      alert_message: "Error submitting form",
      success: function(message) {
        this.alert_message = message;
      }
    };
    $('#' + form_name).ajaxSubmit(options);
    alert(options.alert_message);
  }

Я новичок в Javascript / JSon / Jquery и подозреваю, что неправильно понимаю некоторые основы упомянутых технологий.

UPDATE:

Я указал "async:false" для синхронного выполнения (это правильно?)

Я также попытался вставить задержку между следующими двумя строками:

$('#' + form_name).ajaxSubmit(options);
pausecomp(1000); // inserted pause
alert(options.alert_message);

Это также не решает проблему. Код для pousecomp следует:

  function pausecomp(millis)
  {
    var date = new Date();
    var curDate = null;
    do { curDate = new Date(); }
    while(curDate-date < millis);
  }

Ответы [ 2 ]

0 голосов
/ 20 мая 2010
 $('#' + form_name).ajaxSubmit(options);

Как следует из аббревиатуры AJAX, этот вызов асинхронный, поэтому ваш alert(options.alert_message); вызывается до вызова обратного вызова, поэтому вы всегда получаете предупреждение с сообщением об ошибке, хотя вызов ajax может завершиться успешно, вы можете попробовать что-то вродеэто вместо:

 function update_records(form_name) {

    var options = {
      async: false,
      alert_message: "Error submitting form",
      success: function(message) {
        alert(message);
      },
      error : function(){
        alert(this.alert_message);
      }
    };
    $('#' + form_name).ajaxSubmit(options);

  }
0 голосов
/ 20 мая 2010

AJAX-вызов ajaxSubmit является асинхронным - это означает, что запрос AJAX выполняется не по порядку обычного выполнения программы, а в вашей программе это означает, что предупреждение вызывается до того, как this.alert_message = message; сможет выполнить. Порядок исполнения:

  1. вызов update_records()
  2. сделать запрос ajaxSubmit AJAX, не забудьте выполнить функцию обратного вызова, но не сейчас
  3. вызов alert(options.alert_message)
  4. когда запрос ajaxSubit возвращает данные, выполните функцию обратного вызова (которая устанавливает переменную this.alert_message)

Чтобы предупреждение показывало правильное значение, переместите код, который использует возвращаемые данные AJAX (alert()), в функцию success() - для этого предназначена функция успеха.

...