【问题标题】:JQuery .ajax() success always firing (even when server returns error code)JQuery .ajax() 成功总是触发(即使服务器返回错误代码)
【发布时间】:2010-11-05 10:57:38
【问题描述】:

我有一个由 JQuery 序列化并通过 .ajax() 发布到 url 的表单。

问题是'success:'函数总是被调用,不管服务器是否返回错误代码。

事实上,成功甚至在服务器响应之前触发(我在为请求提供服务的服务器方法上放置了一个断点 - 甚至在此方法完成之前成功触发)。如果服务器返回错误代码(例如状态代码 500),JQuery 会同时调用成功和错误事件!

有什么想法吗?这是我的jQuery代码:

$("#a-dialog").dialog({
    autoOpen: false,
    height: 300,
    width: 400,
    modal: true,
    buttons: {
    "Submit": function() {
                $.ajax({
                  type: 'POST',
                  url: theURL,
                  data: $("#a-dialog-form").serialize(),
                  success: alert('ok!') // THIS IS ALWAYS CALLED (IMMEDIATELY)
                });
        },
    },
});

更新:

这对我来说是一个愚蠢的错误!感谢 blue112 快速指出:)

【问题讨论】:

    标签: jquery ajax


    【解决方案1】:

    这很正常,你必须将它作为回调传递,例如

                $.ajax({
                  type: 'POST',
                  url: theURL,
                  data: $("#a-dialog-form").serialize(),
                  success: function(){alert('ok!');} // The function will be called upon success.
                });
    

    【讨论】:

    • +1 - OP 代码将alert("ok!") 的返回值 分配给success 属性
    【解决方案2】:

    您需要通过一个指向函数的指针来提供成功,或者,如常用的那样,通过传递函数定义。

    你要做的就是有这样的东西:

     "Submit": function() {
                    $.ajax({
                      type: 'POST',
                      url: theURL,
                      data: $("#a-dialog-form").serialize(),
                      success: function (data) {
                              alert('ok!') // THIS IS ALWAYS CALLED (IMMEDIATELY)
                      }
                    });
            },
        },
    

    您的情况是立即调用警报,因此即使根本没有触发 ajax 请求,您也会看到警报消息。

    【讨论】:

      猜你喜欢
      • 2021-07-24
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2020-07-31
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多