JQuery .ajax()成功总是触发(即使服务器返回错误代码)

时间:2010-11-05 10:57:38

标签: jquery ajax

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

问题是无论服务器是否返回错误代码,总是会调用'success:'函数。

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

任何想法发生了什么?这是我的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快速指出:)

2 个答案:

答案 0 :(得分:7)

这是正常的,您必须将其作为回调传递,例如

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

答案 1 :(得分:1)

您需要通过传递函数定义来提供指向函数的指针,或者通常使用它。

你要做的就是这样:

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

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