0

我想提交表单并显示有关结果的消息。 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 的新手,我怀疑我误解了上述技术的一些基础知识。

更新:

我指定"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);
  }
4

2 回答 2

0

ajaxSubmit 的 AJAX 调用是异步的——这意味着 AJAX 请求在通常的程序执行中是无序的,并且在您的程序中这意味着在调用警报之前this.alert_message = message;有机会执行。执行顺序为:

  1. 称呼update_records()
  2. 发出 ajaxSubmit AJAX 请求,记得执行回调函数但不是现在
  3. 打电话给alert(options.alert_message)
  4. 当ajaxSubit请求返回数据时,执行回调函数(即设置this.alert_message变量)

要让警报显示正确的值,请将利用 AJAX 返回数据 (the alert()) 的代码移动到success()函数中——成功函数的用途。

于 2010-05-19T20:50:02.553 回答
0
 $('#' + 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);

  }
于 2010-05-19T20:53:22.327 回答