tha*_*att 78 jquery json web-services
我正在用C#(.ashx文件)编写JSON服务.在成功请求服务后,我返回一些JSON数据.如果请求失败,要么是因为抛出异常(例如数据库超时),要么是因为请求在某种程度上是错误的(例如,数据库中不存在的ID作为参数),服务应该如何响应?什么HTTP状态代码是明智的,我应该返回任何数据,如果有的话?
我期待主要使用jQuery.form插件从jQuery调用服务,jQuery或者这个插件有没有处理错误响应的默认方式?
编辑:我已经决定我将成功使用jQuery + .ashx + HTTP [状态代码]我将返回JSON但是在出错时我会返回一个字符串,因为看起来这就是jQuery的错误选项.阿贾克斯预计.
Cre*_*esh 55
请参阅此问题,以了解有关您的具体情况的最佳做法.
topline建议(来自所述链接)是标准化处理程序查找的响应结构(成功和失败),捕获服务器层的所有异常并将它们转换为相同的结构.例如(来自这个答案):
{
    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指出的那样,无论你选择什么,你都应该保持一致.这说起来容易做起来就像开发中的一切一样!
例如,如果您在SO上过快地提交评论,而不是保持一致并返回
{ Success: false, Message: "Can only comment once every blah..." }
SO将抛出服务器异常(HTTP 500)并在其error回调中捕获它.
尽管使用jQuery + .ashx+ HTTP [状态代码] IMO "感觉正确",但它会增加客户端代码库的复杂性,而不是它的价值.意识到jQuery不会"检测"错误代码,而是缺少成功代码.当尝试使用jQuery围绕http响应代码设计客户端时,这是一个重要的区别.你只有两个选择(是"成功"还是"错误"?),你必须自己进一步分支.如果您有少量WebServices驱动少量页面,那么它可能没问题,但任何规模较大的可能都会变得混乱.
在.asmxWebService(或WCF)中返回自定义对象比自定义HTTP状态代码要自然得多.另外,您可以免费获得JSON序列化.
Ron*_*era 33
您返回的HTTP状态代码应取决于发生的错误类型.如果数据库中不存在ID,则返回404; 如果用户没有足够的权限进行Ajax调用,则返回403; 如果数据库在能够找到记录之前超时,则返回500(服务器错误).
jQuery自动检测此类错误代码,并运行您在Ajax调用中定义的回调函数.文档:http://api.jquery.com/jQuery.ajax/
$.ajax错误回调的简短示例:
$.ajax({
  type: 'POST',
  url: '/some/resource',
  success: function(data, textStatus) {
    // Handle success
  },
  error: function(xhr, textStatus, errorThrown) {
    // Handle error
  }
});
Phi*_*l H 17
使用HTTP状态代码将是一种RESTful方式,但这建议您使用资源URI等来创建RESTful接口的其余部分.
实际上,根据需要定义接口(返回一个错误对象,例如,详细说明带有错误的属性,以及解释它的一大块HTML等),但是一旦你决定在原型中工作的东西,无情地保持一致.
| 归档时间: | 
 | 
| 查看次数: | 96996 次 | 
| 最近记录: |