【问题标题】:Callback success is not called with 201 status code回调成功不是用 201 状态码调用的
【发布时间】:2016-10-27 08:41:23
【问题描述】:

我使用 API Rest。我想用AJAX and JQuery 创建一个资源。我的资源创建正确,但调用了错误回调。

我的代码是:

$.ajax({
    url: "/api/skills.json",
    data: JSON.stringify(skill),
    method: "POST",
    contentType: "application/json",
    statusCode: {
        201: function (data) {
            console.log("201");
        }
    },
    success: function (data) {
        console.log("success");
    },
    error: function (data) {
        console.log("error");
    },
    complete: function (data) {
        console.log("complete");
    }
});

Firefox 控制台的“网络”结果:

HTTP/1.1 201 Created
Date: Thu, 27 Oct 2016 08:29:08 GMT
Server: Apache
X-Powered-By: PHP/7.0.8
Cache-Control: no-cache
Location: http://localhost/api/skills/pdak12ada64d
Allow: POST
Content-Length: 0
Keep-Alive: timeout=5, max=100
Connection: Keep-Alive
Content-Type: application/json

来自控制台的结果:

"201"
"error"
"complete"

为什么 JQuery 用 201 状态调用错误的回调?

我尝试使用快捷方式$.post,结果相同,我不使用快捷方式,因为我使用自定义标题。

【问题讨论】:

标签: jquery ajax


【解决方案1】:

正如我在上面的评论中提到的,似乎当 jQuery.Ajax 得到一个空响应并尝试将其解析为 JSON 时,它会抛出一个错误,然后将其解释为响应错误(而不是解析它)。

这意味着您有两个选择 - 将请求作为文本而不是 JSON 发送(我不推荐)或使用 statusCode 处理响应,就像您在问题中所做的那样,并删除 success 和 @ 987654324@ 回调。

参考:https://stackoverflow.com/a/14988814/12280

【讨论】:

    猜你喜欢
    • 2014-11-22
    • 2017-11-09
    • 2013-06-30
    • 2015-01-10
    • 1970-01-01
    • 2018-02-09
    • 1970-01-01
    • 2017-04-20
    • 1970-01-01
    相关资源
    最近更新 更多