为什么是“jQuery.parseJSON”?没有必要吗?

发布于 2025-01-02 12:56:18 字数 212 浏览 0 评论 0原文

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

如果我执行

var obj = jQuery.parseJSON(response);

“obj”为空,但我可以使用“response”作为 js 对象数组。

这并不是一个真正的问题,但我想理解这种行为。

谢谢

i'm doing an ajax request with query and wondering why my response is already a JS object.

If i do a

var obj = jQuery.parseJSON(response);

'obj' is null, but i can use 'response' as an array of js objects.

This is not really a problem, but i would like to understand this behavior.

Thanks

如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。

扫码二维码加入Web技术交流群

发布评论

需要 登录 才能够评论, 你可以免费 注册 一个本站的账号。

评论(5

抱猫软卧 2025-01-09 12:56:18

当您进行 AJAX 调用并指定数据类型 JSON 时,就会发生这种情况 jQuery 在响应上调用 jQuery.parseJSON。事实上,您可以根据数据类型指定要调用的函数,正如您可以从 文档 中看到的那样

转换器(已添加 1.5)
地图默认:{"* text": window.String, "text
html": true, "文本 json": jQuery.parseJSON, "文本 xml":
jQuery.parseXML} 数据类型到数据类型转换器的映射。每个
转换器的值是一个函数,返回转换后的值
响应

所以如果你进行这样的调用

$.ajax({
  url: yoururl,
  dataType: "json",
  success: function(data){
    //data is already a json
  }

如果你没有指定 dataType jQuery 会尝试猜测它

dataTypeString 默认:智能猜测(xml、json、脚本或
html)

您期望从服务器返回的数据类型。如果没有
指定后,jQuery 将尝试根据 MIME 类型推断它
响应(XML MIME 类型将产生 XML,在 1.4 JSON 中将产生
一个 JavaScript 对象,在 1.4 脚本中将执行该脚本,并且
其他任何内容都将作为字符串返回)。可用类型(和
作为成功回调的第一个参数传递的结果是:

“xml”:返回可以通过 jQuery 处理的 XML 文档。
“html”:以纯文本形式返回 HTML;评估包含的脚本标签
当插入到 DOM 中时。 “script”:将响应评估为
JavaScript 并将其作为纯文本返回。通过附加禁用缓存
URL 的查询字符串参数“=[TIMESTAMP]”,除非缓存
选项设置为 true。注意:这会将 POST 转换为 GET
远程域请求。 “json”:将响应评估为 JSON 并
返回一个 JavaScript 对象。在 jQuery 1.4 中,JSON 数据被解析为
严格的态度;任何格式错误的 JSON 都会被拒绝,并且会出现解析错误
抛出。 (有关正确 JSON 格式的更多信息,请参阅 json.org。)
“jsonp”:使用 JSONP 加载 JSON 块。添加一个额外的
“?回调=?”添加到 URL 末尾以指定回调。禁用
通过将查询字符串参数“
=[TIMESTAMP]”附加到
URL,除非缓存选项设置为 true。
“文本”:纯文本
细绳。多个空格分隔的值:
从 jQuery 1.5 开始,jQuery 可以
将 Content-Type 标头中收到的数据类型转换为
你需要什么。例如,如果您想要文本响应
视为 XML,请使用“text xml”作为数据类型。您还可以制作一个
JSONP 请求,将其作为文本接收,并由 jQuery 解释为
XML:“jsonp 文本 xml。”同样,速记字符串如“jsonp
xml”将首先尝试从 jsonp 转换为 xml,并且失败
即,从 jsonp 转换为文本,然后从文本转换为 xml。

This happens when you make an AJAX call and specify the dataType JSON jQuery calls jQuery.parseJSON on the response for you. In fact you can specify what function to call depending on the dataType as you can se from the documentation

converters(added 1.5)
Map Default: {"* text": window.String, "text
html": true, "text json": jQuery.parseJSON, "text xml":
jQuery.parseXML} A map of dataType-to-dataType converters. Each
converter's value is a function that returns the transformed value of
the response

So if you make a call like this

$.ajax({
  url: yoururl,
  dataType: "json",
  success: function(data){
    //data is already a json
  }

If you don't specify a dataType jQuery tries to guess it

dataTypeString Default: Intelligent Guess (xml, json, script, or
html)

The type of data that you're expecting back from the server. If none
is specified, jQuery will try to infer it based on the MIME type of
the response (an XML MIME type will yield XML, in 1.4 JSON will yield
a JavaScript object, in 1.4 script will execute the script, and
anything else will be returned as a string). The available types (and
the result passed as the first argument to your success callback) are:

"xml": Returns a XML document that can be processed via jQuery.
"html": Returns HTML as plain text; included script tags are evaluated
when inserted in the DOM. "script": Evaluates the response as
JavaScript and returns it as plain text. Disables caching by appending
a query string parameter, "=[TIMESTAMP]", to the URL unless the cache
option is set to true. Note: This will turn POSTs into GETs for
remote-domain requests. "json": Evaluates the response as JSON and
returns a JavaScript object. In jQuery 1.4 the JSON data is parsed in
a strict manner; any malformed JSON is rejected and a parse error is
thrown. (See json.org for more information on proper JSON formatting.)
"jsonp": Loads in a JSON block using JSONP. Adds an extra
"?callback=?" to the end of your URL to specify the callback. Disables
caching by appending a query string parameter, "
=[TIMESTAMP]", to the
URL unless the cache option is set to true.
"text": A plain text
string. multiple, space-separated values:
As of jQuery 1.5, jQuery can
convert a dataType from what it received in the Content-Type header to
what you require. For example, if you want a text response to be
treated as XML, use "text xml" for the dataType. You can also make a
JSONP request, have it received as text, and interpreted by jQuery as
XML: "jsonp text xml." Similarly, a shorthand string such as "jsonp
xml" will first attempt to convert from jsonp to xml, and, failing
that, convert from jsonp to text, and then from text to xml.

天赋异禀 2025-01-09 12:56:18

这很大程度上取决于您传递到 jQuery ajax 请求中的 dataType。这可能通过调用 .getJSON() 或直接使用 $.ajax() 隐式发生。

但是,如果您省略 dataType,jQuery 会尝试执行一些魔法并猜测收到了哪些数据。 对于 JSON 数据,它使用一个简单的正则表达式来检查响应是否看起来像 JSON 字符串,如果是,它会自动为您解析它。
jQuery 将尝试根据响应的 MIME 类型来推断它。

因此,请始终保持精确并告诉 jQuery 您期望哪种类型的数据。

It pretty much depends which dataType you pass into your jQuery ajax request. This might happen implict by calling .getJSON() or directly using $.ajax().

However, if you omit the dataType, jQuery trys to do some magic and guesses which data was received. As for JSON data, it uses a simple regular expression to check if a response looks like a JSON-string and if so, it automatically parses it for you.
jQuery will try to infer it based on the MIME type of the response.

So always be precise and tell jQuery which type of data you expect.

埋情葬爱 2025-01-09 12:56:18

jQuery 的 ajax 方法的默认行为是分析响应并将其作为最合适的数据类型返回。因此,如果您的响应看起来像 JSON,它将被转换为 JavaScript 对象/数组。

您可以通过在 ajax 设置中设置 dataType 属性来覆盖此行为。

The default behaviour of jQuery's ajax method is to analyse the response and return it as the most appropriate data type. If your response looks like JSON, therefore, it will be converted to a JavaScript object/array.

You can override this behaviour by setting the dataType attribute in the ajax settings.

伪心 2025-01-09 12:56:18

如果您将 dataType 指定为 json,jquery 会为您解析响应,就像

$.ajax({
...
dataType:'json',
...
});

jQuery.getJSON()

这是 getJSON 的源代码,如下所示

getJSON: function( url, data, callback ) {
return jQuery.get( url, data, callback, "json" );
},

https://github.com/jquery/jquery/blob/master/src /ajax.js#L283

if you specify the dataType as json the jquery parses the response for you like

$.ajax({
...
dataType:'json',
...
});

same is the case with jQuery.getJSON()

this is how the source code for getJSON looks like

getJSON: function( url, data, callback ) {
return jQuery.get( url, data, callback, "json" );
},

https://github.com/jquery/jquery/blob/master/src/ajax.js#L283

向日葵 2025-01-09 12:56:18

因为

jQuery.ajaxSettings.converters["text json"] === jQuery.parseJSON

I.E 它会在每次自动检测到 json 响应或由您自己显式设置时运行该函数

Because

jQuery.ajaxSettings.converters["text json"] === jQuery.parseJSON

I.E it will run the function everytime json response is detected automatically or explicitly set by yourself

~没有更多了~
我们使用 Cookies 和其他技术来定制您的体验包括您的登录状态等。通过阅读我们的 隐私政策 了解更多相关信息。 单击 接受 或继续使用网站,即表示您同意使用 Cookies 和您的相关数据。
原文