2012-06-15 36 views
1

我的jQuery fu是新的,所以请原谅,如果这个问题确实如此。jQuery ajax成功与错误方法args颠倒了,为什么?

的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服务器端进行响应,并知道我需要在客户端解析/访问对象属性。

感谢

回答

1

据我了解,在成功(或其他方式)的HTTP状态代码表示“REST式”服务,你不应该把有意义的内容中的错误条件HTTP主体。将其置于40x错误代码的文本中。

+0

+1,好点,但我相信这是已经发生。例如,我的服务器端401是“未经授权(asJson(i18n('not authorized')))”,其中“未经授权”是本地化的消息,等等,等等,您需要登录才能查看Foo公司内容。 – virtualeyes

+0

刚刚看过萤火虫,没有骰子,玩,我正在使用的框架,发送一个401默认的“未经授权”的文本,所以看起来,服务器端的数据是返回响应,而不是状态本身 – virtualeyes

1

好了,现在更清楚一点:

阿贾克斯成功的第一个参数,数据,根据MIME类型,如果任何数据类型param选项设置自动解析。

这就解释了为什么,处理包含比方说,一个订单号一个JSON地图时,我没有对它进行解析客户端,可以简单地指data.orderNum

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

可能太旧帽子很多,但好知道从成功/错误会发生什么事情,渐渐双,双引号字符串答复和其他古怪......

相关问题