小编典典

为什么不需要“ jQuery.parseJSON”?

ajax

我正在用查询执行ajax请求,想知道为什么我的响应已经是JS对象。

如果我做一个

var obj = jQuery.parseJSON(response);

‘obj’为null,但是我可以将’response’用作js对象数组。

这不是真正的问题,但是我想了解这种行为。

谢谢


阅读 317

收藏
2020-07-26

共1个答案

小编典典

当您进行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。

2020-07-26