12

我有这样一个ajax帖子:

$.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中,这并没有真正影响问题,但解释了我的语法

4

2 回答 2

8

所以我们找出了问题所在,JSON.parse 抛出了一个语法错误——所以发送的值不是有效的 JSON 格式。发布者无法在 chrome 中看到语法错误,但 firebug 显示了该错误。

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

编辑- 你也应该使用不同的响应,许多使用 200 - OK,但我建议在这种情况下使用 202 - ACCEPTED。

于 2013-02-20T19:59:27.733 回答
3

查看源代码,成功应该在 200 - 300 和 304 之间触发。另一种方法是显式调用 statusCode:

$.ajax({
  statusCode: {
    201: function() {
      console.log("HERE");
    }
  }
});
于 2013-02-20T20:00:19.860 回答