Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/ajax/6.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
始终触发JQuery.ajax()成功(即使服务器返回错误代码)_Jquery_Ajax - Fatal编程技术网

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

始终触发JQuery.ajax()成功(即使服务器返回错误代码),jquery,ajax,Jquery,Ajax,我有一个表单正在被JQuery序列化,并通过.ajax发布到url 问题是不管服务器是否返回错误代码,总是调用“success:”函数 事实上,甚至在服务器响应之前就触发了success。我已经在为请求提供服务的服务器方法上放置了一个断点—甚至在该方法完成之前,success也会触发。如果服务器返回错误代码,例如状态代码500,JQuery将调用成功和错误事件 知道发生了什么事吗?以下是我的jquery代码: $("#a-dialog").dialog({ autoOpen: false

我有一个表单正在被JQuery序列化,并通过.ajax发布到url

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

事实上,甚至在服务器响应之前就触发了success。我已经在为请求提供服务的服务器方法上放置了一个断点—甚至在该方法完成之前,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快速指出它:

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

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

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

你要做的就是做这样的事情:

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

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

+1-OPs代码正在分配alertok的返回值!为了成功的财产