在过去的几年中,我一直在与Ruby on Rails一起工作,现在转到了用PHP编写的项目中,我一无所获。
我有一个jQuery(CoffeeScript)AJAX调用,它等待成功或错误。
问题是,即使请求失败,我也将始终获得良好的状态,请参阅:
每次我得到这个信息都不是成功或错误,脚本只会挂起。
$.ajax
url: url
type: type
beforeSend: ->
// do something
error: ->
// I can never get here
success: (data) ->
// this works sometimes, but not when I get this weird stuff from screenshot
我想知道这是前端还是后端/服务器问题,我不应该在这里得到不同的状态代码吗?
如您所见,ajax脱离了HTTP状态代码。 您的响应带有200,因此请求成功。 身体说"失败"的事实是无关紧要的。 jQuery不是很聪明,无法"读取"体内的内容。
用现实的术语来说,您的Ajax请求被驱使到商店,试图购买巧克力棒,而商店缺货。 往返商店的旅程完全成功(汽车没有抛锚,您没有迷路,等等...)。 您没有得到巧克力棒的事实与这次旅行的成功/失败无关。
我完全理解,尽管在这种情况下,Rails Id绝对不会获得状态码200。 那我该如何解决呢?
将if(data.status == fail) { call_error_handling_code(); }放入success块中。
您只是在调用一些返回JSON数据的服务,并且正在向您返回一条消息,提示您
status:fail
但是,您可以成功到达服务器,调用服务方法,并获得响应,因此200 OK并不是不合理的HTTP代码。 这可能不是完全RESTful的,但并不少见。