【问题标题】:jQuery ajax success and error method args reversed, why?jQuery ajax 成功和错误方法 args 颠倒了,为什么?
【发布时间】:2012-06-18 17:55:54
【问题描述】:

我的 jQuery fu 是新的,如果这个问题确实是这样,请原谅显而易见的问题。

jQuery ajax 文档显示错误和成功定义如下:

error(jqXHR, textStatus, errorThrown)
success(data, textStatus, jqXHR)

这让我有点保持一致性,因为默认情况下,服务器端我返回状态(200、401、404 等)以及 JSON 编码响应,这可能是 json 错误或成功字符串,数组、对象等。

基本上发生的事情是成功接收json字符串(coffeescript)

success: (data) ->
  $('#status').html( data )

我可以直接打印json响应字符串,这很混乱,因为等效的错误版本需要我解析json字符串并访问数据对象的responseText属性:

error: (data) ->
  $('#status').html( jParse(data.responseText) )

那么,我怎样才能让客户端镜像服务器端的一致性呢?即用 json 服务器端响应并知道我需要在客户端解析/访问对象属性。

谢谢

【问题讨论】:

    标签: jquery ajax arguments consistency


    【解决方案1】:

    据我了解,在 HTTP 状态代码中指示成功(或其他)的“RESTful”服务中,您不应该将有意义的内容放入错误条件的 HTTP 正文中。把它放在40x错误代码的文本中。

    【讨论】:

    • +1,好点,虽然我相信这已经发生了。例如我的服务器端401是“Unauthorized(asJson(i18n('not authorized')))”,其中“not authorized”是本地化消息,等等,需要登录才能查看Foo公司内容。
    • 刚刚查看了萤火虫,没有骰子,Play,我正在使用的框架,发送一个带有默认“未经授权”文本的 401,所以看起来服务器端数据是作为响应返回的,而不是在状态本身
    【解决方案2】:

    好的,现在清楚一点:

    如果没有设置 dataType 参数选项,ajax 成功的第一个参数 data 会根据 mime 类型自动解析。

    这解释了为什么在处理包含订单号的 json 映射时,我不必在客户端解析它,可以简单地引用 data.orderNum

    另一方面,在 ajax 错误的第一个参数 jqXHR 上没有这样的 mime 类型推断,这就解释了为什么在引用 data.responseText 之类的属性之前我必须解析回复。

    对很多人来说可能是老帽子,但很高兴知道成功/错误会发生什么,得到双引号、双引号字符串回复和其他奇怪的东西......

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2016-04-11
      • 2018-04-27
      • 2020-11-21
      • 2012-09-05
      • 1970-01-01
      • 2014-03-06
      • 2011-02-10
      相关资源
      最近更新 更多