首页 文章

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

提问于
浏览
28

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

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

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

error :在4xx,5xx等状态下,状态代码随响应一起被触发 .

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

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

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

Or ,我应该使用 4xx 状态代码,也许'Bad Request',因为他们发给我的数据无效? (因此,使用 error 回调来执行必要的客户端通知) .

2 回答

  • 14

    我同意400 Bad Request回复 .

    为了获得灵感,你可以看看Twitter(广泛使用的JSON服务)如何做到这一点:https://dev.twitter.com/overview/api/response-codes

    代码文本说明

    • 200 OK - 成功!

    • 304 Not Modified - 没有新的数据要返回 .

    • 400 Bad Request - 请求无效或无法以其他方式提供 . 随附的错误消息将进一步解释 . 没有身份验证的请求被视为无效,并将产生此响应 .

    • 401 Unauthorized - 身份验证凭据丢失或不正确 . 在其他情况下也会返回(例如,对API v1 endpoints 的所有调用都返回401) .

    • 403 Forbidden - 请求已被理解,但已被拒绝或不允许访问 . 随附的错误消息将解释原因 . 由于更新限制而拒绝请求时使用此代码 . 返回此状态的其他原因与下表中的响应代码一起列出 .

    • 404 Not Found - 请求的URI无效或请求的资源(例如用户)不存在 . 当请求的方法不支持请求的格式时,也会返回 .

    • 406 Not Acceptable - 在请求中指定了无效格式时返回 .

    • 410 Gone - 此资源消失了 . 用于指示API endpoints 已关闭 .

    • 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

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

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

相关问题