例如,jQuery在发出Ajax请求时有以下两个特定的回调:
success
:当200 / 2xx状态代码与响应一起发送时触发。
error
:当4xx,5xx等状态代码带回响应时被触发。
如果用户尝试创建新的“Person”对象,我会在成功时发回新创建的对象的JSON表示,从而允许javascript访问新对象的必要唯一ID等。当然,发送200状态代码。
如果用户提交格式错误或无效的数据(例如,无效/不完整的“名称”字段),我想通过JSON发回验证错误消息。 (我不明白为什么这会是一件坏事)。
我的问题是:这样做,我应该发送 200 状态代码,因为我成功处理了无效数据?因此,我将使用jQuery success
回调,但只是检查错误......
或,我应该使用 4xx 状态代码,也许是“错误请求”,因为他们发送给我的数据无效? (因此,使用error
回调来执行必要的客户端通知)。
答案 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的更多信息!