Jquery ajax done回调函数无法响应201状态码

12

我有一个如下的ajax post请求:

$.post("/api/v1/payment_methods/create_credit_card", values)
.done (response) ->
  console.log("GOOD JOB")
.fail (response) ->
  console.log("Adas")

响应代码是201,但是done似乎没有捕获它,而是会失败。我认为201应该被视为成功并被done捕获。有任何想法为什么它不起作用吗?

注意:上面的代码是在Coffeescript中编写的,这并不影响问题,但解释了我的语法。


我最初并不是自己发送它的。我要发布到的API如果成功了就会返回一个字符串,这个字符串被捆绑成了201。那么手动返回200是否更好呢? - JustNeph
1
如果你把它改成200,它能工作吗? - Keith Rousseau
我已经尝试了200次,但仍然没有成功。Ajax中的状态检查可以检测到它,但仍然失败。 - JustNeph
2个回答

8

所以我们找到了问题,JSON.parse抛出了语法错误 - 所以发送的值不是有效的JSON格式。海报在Chrome中无法看到语法错误,但Firebug显示了错误。

这表明,每当Javascript抛出异常时,响应仍可以是200、201、202等等,但由于语法错误,将触发fail()函数。

编辑 - 此外,您应该使用不同的响应,许多人使用200-OK,但我建议在这种情况下使用202-已接受。


你用过Firebug并查看了响应吗? - am_
是的,我正在Chrome开发者工具中查看响应。调用response.status返回202(之前是201,但基于先前的评论我进行了更改),而response.statusText为“已接受”。 - JustNeph
你确定这不是由于编译Coffeescript到Javascript时出现了问题吗?为了确保,最好尝试直接使用Javascript。 - am_
是的,实际显示在页面上的代码是:return $.post("/api/v1/payment_methods/create_credit_card", values).done(function(response) { return console.log("干得好"); }).fail(function(response) { return console.log("Adas"); }); - JustNeph
好的,看起来是有效的。你使用的jQuery版本是什么? - am_
显示剩余4条评论

4

查看源代码,成功应在200-300和304之间触发。另一种方法是明确指定statusCode:

$.ajax({
  statusCode: {
    201: function() {
      console.log("HERE");
    }
  }
});

我可以手动检查特定的状态码,但我想使用done方法来检查所有成功的情况。有没有任何原因,done不会触发201或202? - JustNeph
就像我之前说的,根据源代码来看,似乎done应该可以捕获它。我只是建议使用statusCode回调函数来查看是否正确捕获了它。 - Keith Rousseau

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接