2013-05-03 42 views
0

我正在閱讀代碼片段,並找出它在這個奇怪的JavaScript問題出現時如何工作。Javascript如何區分Json對象和String?

,其JavaScript他們所謂

var apiUrl = '/api/v1/pin/?format=json&order_by=-id&offset='+String(offset); 
... 
$.get(apiUrl, function(pins) { 
    for (...; i < pins.objects.length; i++) ... // works fine 
}); 

他們的API返回此JSON格式:

{"meta": {"limit": 50, "next": "?limit=50&format=json&order_by=-id&offset=60", "offset":  
10, "previous": null, "total_count": 79}, "objects": [ {...},{...}, ... ]} 

我試圖模仿它,但$。獲得從未接受過我的簡化的JSON字符串。

// my attempt 
$.get(myApiUrl, function(pins) { 
    for (...; i < pins.objects.length; i++) ... // ERROR: undefined length 
}); 

我的Json字符串是相似但縮短的格式。

{"objects": [{...},{...}, ... ]} 

我不能讓它工作,直到我GOOGLE了$ .getJson()命令。我只是想知道爲什麼他們的javascript代碼只用$ .get,而我的必須使用$ .getJson?

它是否可以設置爲強制JavaScript將它讀爲json的某種標題?

+1

響應式應用程序/ json也許 – HMR 2013-05-03 05:50:25

回答

3

如果不明確指定內容類型,jQuery將嘗試根據服務器返回的標頭確定數據類型。

如果您未使用JSON序列化程序,則使用http://jsonlint.com/this驗證JSON的有效性,否則您將收到錯誤消息。對於JSON

正確的內容類型標頭是:application/json

+0

謝謝你,你是對的。設置正確的標題後,我的問題得到解決。 – 2013-05-04 18:53:00

2

設置HTTP響應頭Content-Typeapplication/json

如:

HTTP/1.1 200 OK 
Content-Type: application/json 
3

在這兩種情況下,AJAX調用返回一個字符串。 jQuery不知何故必須弄清楚如何處理它。它是如何實現的,取決於dataType選項。

該文檔稱爲默認值Intelligent guess。那麼如何猜測?評估響應的Content-Type標題。如果是application/json那麼jQuery會嘗試創建一個對象。

爲確保jQuery始終嘗試將響應解釋爲JSON,您可以將dataType設置爲json