问题 Jquery ajax完成回调没有响应201


我有一个ajax帖子:

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

响应是201,然而,完成似乎没有捕获它,而是它将失败。我认为201会被认为是成功的,并且会被完成捕获。为什么它不起作用的任何想法?

注意:上面的代码是在coffeescript中,它并没有真正影响问题,但解释了我的语法


10096
2018-02-20 19:49


起源

好吧,我原本不是自己发送的。我发布的api将发回一个字符串,如果它成功捆绑为201.是否更好的形式才能手动返回200? - justNeph
如果将其更改为200,它是否有效? - Keith Rousseau
我试过200但仍然没有好处。 ajax中的状态检查可以检查它但仍然失败 - justNeph


答案:


所以我们弄清楚出了什么问题,JSON.parse抛出了一个语法错误 - 所以发送的值不是有效的JSON格式。海报无法在chrome中看到Syntax错误,但是firebug显示错误。

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

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


8
2018-02-20 19:59



哦对不起,我忘了提到我上面的代码是在Coffeescript - justNeph
我尝试将其更改为返回202,但仍然无法捕获它 - justNeph
你用过萤火虫并看了回应吗? - am_
是的,我在Chrome开发人员工具中查看响应。调用response.status返回202(是201,但我根据以前的注释更改了它),response.statusText是“已接受”。 - justNeph
并且你确定这不是由于在将coffescript编译成javascript时打嗝造成的吗?可能想尝试直接的javascript以防万一。 - am_


查看源代码,成功应该触发200 - 300到304之间的任何内容。另一种方法是显式调用statusCode:

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

2
2018-02-20 20:00



我可以手动检查特定的状态代码,但我想使用done方法检查所有成功。是否有任何理由为201或202不会开火? - justNeph
就像我说的那样,根据来源,似乎已完成捕获它。我只是建议使用statusCode回调来查看是否正确捕获了它。 - Keith Rousseau