簡體   English   中英

為什么'jQuery.parseJSON'沒有必要?

[英]Why is 'jQuery.parseJSON' not necessary?

我正在使用查詢執行ajax請求,並想知道為什么我的響應已經是JS對象。

如果我做了

var obj = jQuery.parseJSON(response);

'obj'為null,但我可以使用'response'作為js對象的數組。

這不是一個真正的問題,但我想了解這種行為。

謝謝

當您進行AJAX調用並指定dataType JSON時,會在響應中為您調用jQuery.parseJSON。 實際上,您可以根據dataType指定要調用的函數,您可以從文檔中進行選擇

轉換器(增加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默認值:智能猜測(xml,json,script或html)

您期望從服務器返回的數據類型。 如果沒有指定,jQuery將嘗試根據響應的MIME類型推斷它(XML MIME類型將產生XML,在1.4 JSON中將產生一個JavaScript對象,在1.4腳本中將執行腳本,其他任何東西將是以字符串形式返回)。 可用的類型(以及作為成功回調的第一個參數傳遞的結果)是:

“xml”:返回可以通過jQuery處理的XML文檔。
“html”:以純文本形式返回HTML; 包含的腳本標記在插入DOM時進行評估。 “script”:將響應評估為JavaScript並將其作為純文本返回。 通過將查詢字符串參數“ = [TIMESTAMP]”附加到URL來禁用緩存, 除非緩存選項設置為true。 注意:這會將POST轉換為GET以獲取遠程域請求。 “json”:將響應計算為JSON並返回JavaScript對象。 在jQuery 1.4中,JSON數據以嚴格的方式解析; 任何格式錯誤的JSON都會被拒絕,並拋出一個解析錯誤。 (有關正確的JSON格式的更多信息,請參閱json.org。)
“jsonp”:使用JSONP加載JSON塊。 添加額外的“?callback =?” 到URL的末尾以指定回調。 通過將查詢字符串參數“ = [TIMESTAMP]” 附加到URL來禁用緩存,除非緩存選項設置為true。
“text”:純文本字符串。 多個空格分隔的值:
從jQuery 1.5開始,jQuery可以將dataType從Content-Type標頭中收到的內容轉換為您需要的內容。 例如,如果要將文本響應視為XML,請對dataType使用“text xml”。 您還可以發出JSONP請求,將其作為文本接收,並由jQuery解釋為XML:“jsonp text xml”。 類似地,諸如“jsonp xml”之類的速記字符串將首先嘗試從jsonp轉換為xml,如果失敗,則從jsonp轉換為text,然后從text轉換為xml。

它幾乎取決於您傳遞給jQuery ajax請求的dataType 調用.getJSON()或直接使用$.ajax()可能會發生這種情況。

但是,如果省略dataType ,jQuery會嘗試做一些魔術並猜測接收到哪些數據。 對於JSON數據,它使用簡單的正則表達式來檢查響應是否看起來像JSON字符串,如果是,它會自動為您解析它。 jQuery將嘗試根據響應的MIME類型推斷它。

因此,請務必准確地告訴jQuery您期望的數據類型。

jQuery的ajax方法的默認行為是分析響應並將其作為最合適的數據類型返回。 因此,如果您的響應看起來像JSON,它將被轉換為JavaScript對象/數組。

您可以通過在ajax設置中設置dataType屬性來覆蓋此行為。

如果你將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

因為

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

IE它將在每次自動檢測到json響應或由您自己明確設置時運行該函數

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM