JSON响应Ajax调用的正确状态代码?

时间:2011-02-16 19:52:03

标签: javascript ajax json http http-status-codes

我的项目是从浏览器返回JSON到Ajax调用。我想知道正确的状态代码是什么,用于发送回无效(但成功处理)数据提交的响应。

例如,jQuery在发出Ajax请求时有以下两个特定的回调:

success:当200 / 2xx状态代码与响应一起发送时触发。

error:当4xx,5xx等状态代码带回响应时被触发。

如果用户尝试创建新的“Person”对象,我会在成功时发回新创建的对象的JSON表示,从而允许javascript访问新对象的必要唯一ID等。当然,发送200状态代码。

如果用户提交格式错误或无效的数据(例如,无效/不完整的“名称”字段),我想通过JSON发回验证错误消息。 (我不明白为什么这会是一件坏事)。

我的问题是:这样做,我应该发送 200 状态代码,因为我成功处理了无效数据?因此,我将使用jQuery success回调,但只是检查错误......

,我应该使用 4xx 状态代码,也许是“错误请求”,因为他们发送给我的数据无效? (因此,使用error回调来执行必要的客户端通知)。

2 个答案:

答案 0 :(得分:14)

我同意400 Bad Request回复。

为了获得灵感,您可以了解Twitter(广泛使用的JSON服务)如何执行此操作: https://dev.twitter.com/overview/api/response-codes

Code Text说明

  • 200 OK - 成功!
  • 304 Not Modified - 没有要返回的新数据。
  • 400 Bad Request - 请求无效或无法以其他方式提供。随附的错误消息将进一步解释。没有身份验证的请求被视为无效,并将产生此响应。
  • 401 Unauthorized - 缺少或不正确的身份验证凭据。在其他情况下也会返回(例如,对API v1端点的所有调用都返回401)。
  • 403 Forbidden - 请求已被理解,但已被拒绝或不允许访问。随附的错误消息将解释原因。由于更新限制而拒绝请求时使用此代码。返回此状态的其他原因与下表中的响应代码一起列出。
  • 404 Not Found - 请求的URI无效或请求的资源(例如用户)不存在。当请求的方法不支持请求的格式时,也会返回。
  • 406 Not Acceptable - 在请求中指定了无效格式时返回。
  • 410 Gone - 此资源消失了。用于指示API端点已关闭。
  • 420 Enhance Your Calm当应用程序受到速率限制时返回。
  • 422 Unprocessable Entity - 无法处理上传到POST帐户/ update_profile_banner的图片时返回。
  • 429 Too Many Requests - 由于应用程序的资源限制已用尽而无法提供请求时返回。请参阅速率限制。
  • 500 Internal Server Error =有些东西坏了。如果其他人遇到类似问题,请将您的请求的其他详细信息发布到开发人员论坛。
  • 502 Bad Gateway - Twitter已关闭或正在升级。
  • 503 Service Unavailable - Twitter服务器已启动,但请求超载。稍后再试。
  • 504 Gateway Timeout - Twitter服务器已启动,但由于堆栈中的某些故障,无法处理请求。稍后再试。

答案 1 :(得分:1)

我会发回'400 Bad Request'标题,以回应json中出现错误的信息。 然后使用jquerys $ .ajaxError()事件处理程序捕获事件并解析我收到的错误消息,以便向最终用户提供良好的反馈。

您可以阅读有关ajaxError事件处理程序here的更多信息!