使用201状态代码不会调用回调成功

Joh*_*nyC 5 ajax jquery

我使用API​​ Rest.我想用AJAX和JQuery创建一个ressource .我的ressource是正确创建的,但调用了错误回调.

我的代码是:

$.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");
    }
});
Run Code Online (Sandbox Code Playgroud)

从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
Run Code Online (Sandbox Code Playgroud)

控制台的结果:

"201"
"error"
"complete"
Run Code Online (Sandbox Code Playgroud)

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

我尝试使用快捷方法$.post和相同的结果,我不使用快捷方法,因为我使用自定义标头.

Ada*_*son 2

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

这意味着您有两个选择 - 要么以文本形式发送请求而不是 JSON(我不推荐),要么statusCode像您在问题中所做的那样处理响应并删除successerror回调。

参考:/sf/answers/1049217011/