jquery - JSON 服务在失败/错误时应该返回什么

标签 jquery web-services json

我正在用 C#(.ashx 文件)编写 JSON 服务。在对服务的成功请求时,我返回一些 JSON 数据。如果请求失败,要么是因为抛出了异常(例如数据库超时),要么是因为请求在某种程度上是错误的(例如,数据库中不存在的 ID 作为参数给出)服务应该如何响应?哪些 HTTP 状态代码是合理的,如果有的话,我应该返回任何数据吗?

我预计该服务将主要使用 jQuery.form 插件从 jQuery 调用,jQuery 或此插件是否有任何默认方式来处理错误响应?

编辑:我决定我将使用 jQuery + .ashx + HTTP [状态代码] 成功时我将返回 JSON,但在错误时我将返回一个字符串,就像它显示的那样这就是 jQuery.ajax 的错误选项所期望的。

最佳答案

this question了解适合您情况的最佳实践。

最重要的建议(来自上述链接)是标准化您的处理程序寻找的响应结构(成功和失败),在服务器层捕获所有异常并将它们转换为相同的结构。例如(来自 this answer ):

{
    success:false,
    general_message:"You have reached your max number of Foos for the day",
    errors: {
        last_name:"This field is required",
        mrn:"Either SSN or MRN must be entered",
        zipcode:"996852 is not in Bernalillo county. Only Bernalillo residents are eligible"
    }
} 

这是 stackoverflow 使用的方法(如果您想知道其他人是如何做这种事情的);投票之类的写操作有 "Success""Message" 字段,无论是否允许投票:

{ Success:true, NewScore:1, Message:"", LastVoteTypeId:3 }

作为 @Phil.H pointed out ,无论你选择什么,你都应该保持一致。这说起来容易做起来难(开发中的一切都是如此!)。

例如,如果您在 SO 上提交评论太快,而不是保持一致并返回

{ Success: false, Message: "Can only comment once every blah..." }

SO 将抛出一个服务器异常 (HTTP 500) 并在它们的 error 回调中捕获它。

尽管使用 jQuery + .ashx + HTTP [状态代码] IMO “感觉不错”,但它会给您的客户端代码库增加比其值(value)更多的复杂性。意识到 jQuery 不会“检测”错误代码,而是缺少成功代码。在尝试使用 jQuery 围绕 http 响应代码设计客户端时,这是一个重要的区别。您只有两个选择(是“成功”还是“错误”?),您必须自己进一步分支。如果您有少量 Web 服务驱动少量页面,那可能没问题,但任何规模较大的东西都可能会变得困惑。

.asmx WebService(或 WCF 中)返回自定义对象比自定义 HTTP 状态代码要自然得多。此外,您还可以免费获得 JSON 序列化。

关于jquery - JSON 服务在失败/错误时应该返回什么,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/674027/

相关文章:

javascript - #each 上的 Handlebars 解析错误

php - 通过我的 REST API 连接 Google REST API 无效

java - JSON深度映射

php - 如何在php中将jsonarray转换为jsonobject并另存为json文件

javascript - 如何为点击事件创建一个函数?

javascript - 单击按钮编辑表格标题

java - JPA 从 Web 服务注销

javascript - 如何使用 MVC 中的部分渲染概念在 div 中显示输出

jquery - "Object not supported"尝试访问 FullCalendar 时出现 Javascript 错误

c - 使用 C 服务器通过互联网发送大文件(图像)