我正在用查询执行ajax请求,想知道为什么我的响应已经是JS对象。
如果我做一个
var obj = jQuery.parseJSON(response);
‘obj’为null,但是我可以将’response’用作js对象数组。
这不是真正的问题,但是我想了解这种行为。
谢谢
当您进行AJAX调用并指定dataType JSON时,就会发生这种情况jQuery会在响应中为您调用jQuery.parseJSON。实际上,您可以根据数据类型指定要调用的函数,如文档中所述
转换器(添加1.5) Map默认值:{“ * text”:window.String,“ text html”:true,“ text json”:jQuery.parseJSON,“ text xml”:jQuery.parseXML} dataType-to- dataType转换器。每个转换器的值都是一个函数,该函数返回响应的转换值
所以如果你这样打
$.ajax({ url: yoururl, dataType: "json", success: function(data){ //data is already a json }
如果您未指定dataType,则jQuery会尝试猜测它
dataTypeString默认值:Intelligent Guess(xml,json,脚本或html) 您期望从服务器返回的数据类型。如果未指定,则jQuery将尝试根据响应的MIME类型来推断它(XML MIME类型将产生XML,在1.4中,JSON将产生JavaScript对象,在1.4中,脚本将执行该脚本,而其他任何内容将是以字符串形式返回)。可用的类型(以及作为第一个参数传递给您的成功回调的结果)是: “ xml”:返回可以通过jQuery处理的XML文档。 “ html”:以纯文本形式返回HTML;插入到DOM中时,将评估包含的脚本标签。“脚本”:将响应评估为JavaScript并以纯文本形式返回。 除非将高速缓存选项设置为true,否则通过在URL上 附加查询字符串参数“ = [TIMESTAMP]”来 禁用高速缓存 。 注意:对于远程域请求,这会将POST转换为GET。“ json”:将响应评估为JSON并返回一个JavaScript对象。在jQuery 1.4中,以严格的方式解析JSON数据。任何格式错误的JSON都会被拒绝,并引发解析错误。(有关正确的JSON格式的更多信息,请参见json.org。) “ jsonp”:使用JSONP加载JSON块。添加一个额外的“?callback =?” URL的末尾以指定回调。_除非将高速缓存选项设置为true,否则通过在URL上 _附加查询字符串参数“ = [TIMESTAMP]”来 禁用高速缓存 。 “文本”:纯文本字符串。多个以空格分隔的值: 从jQuery 1.5开始,jQuery可以将dataType从Content- Type标头中接收到的数据类型转换为所需的数据类型。例如,如果您希望将文本响应视为XML,请对数据类型使用“文本xml”。您还可以发出JSONP请求,将其接收为文本,然后由jQuery解释为XML:“ jsonp text xml”。类似地,诸如“ jsonp xml”之类的速记字符串将首先尝试从jsonp转换为xml,然后,尝试将jsonp转换为文本,然后再从文本转换为xml。
dataTypeString默认值:Intelligent Guess(xml,json,脚本或html)
您期望从服务器返回的数据类型。如果未指定,则jQuery将尝试根据响应的MIME类型来推断它(XML MIME类型将产生XML,在1.4中,JSON将产生JavaScript对象,在1.4中,脚本将执行该脚本,而其他任何内容将是以字符串形式返回)。可用的类型(以及作为第一个参数传递给您的成功回调的结果)是:
“ xml”:返回可以通过jQuery处理的XML文档。 “ html”:以纯文本形式返回HTML;插入到DOM中时,将评估包含的脚本标签。“脚本”:将响应评估为JavaScript并以纯文本形式返回。 除非将高速缓存选项设置为true,否则通过在URL上 附加查询字符串参数“ = [TIMESTAMP]”来 禁用高速缓存 。 注意:对于远程域请求,这会将POST转换为GET。“ json”:将响应评估为JSON并返回一个JavaScript对象。在jQuery 1.4中,以严格的方式解析JSON数据。任何格式错误的JSON都会被拒绝,并引发解析错误。(有关正确的JSON格式的更多信息,请参见json.org。) “ jsonp”:使用JSONP加载JSON块。添加一个额外的“?callback =?” URL的末尾以指定回调。_除非将高速缓存选项设置为true,否则通过在URL上 _附加查询字符串参数“ = [TIMESTAMP]”来 禁用高速缓存 。 “文本”:纯文本字符串。多个以空格分隔的值: 从jQuery 1.5开始,jQuery可以将dataType从Content- Type标头中接收到的数据类型转换为所需的数据类型。例如,如果您希望将文本响应视为XML,请对数据类型使用“文本xml”。您还可以发出JSONP请求,将其接收为文本,然后由jQuery解释为XML:“ jsonp text xml”。类似地,诸如“ jsonp xml”之类的速记字符串将首先尝试从jsonp转换为xml,然后,尝试将jsonp转换为文本,然后再从文本转换为xml。