我有一些使用jQuery 1.4.2的莫名其妙的行爲,我開始認爲它可能是一個safari問題,而不是jQuery之一。讓我解釋。jquery ajax方法與dataType'json'錯誤地解析json數據
我開始根本不夠用.getJSON這樣的:
$.getJSON("/challenge/results", form_data, function(data){
//I know console.log is bad news, just a simplification.
console.log('data', data);
}
和日誌給我沿着
>locations: Array (1)
行的東西,而我所期待的大小2.所以數組我看了看json的迴應:
{"locations":
[{"customer_id":2,"editable":true,"id":971,"latitude":43.659208,"longitude":-79.407501,"max_zoom":25,"min_zoom":9,"name":"test"},
{"customer_id":3,"editable":true,"id":974,"latitude":36.746944,"longitude":-107.970899,"max_zoom":25,"min_zoom":9,"name":"test2"}]}
爲了這個緣故,我已經簡化了它清晰度,但據我所知,收到的json是完全有效的(通過rails以編程方式生成)。 [更新: JSONLint證實了這一假設。]
我感到意外,所以我將我請求到$就要求看他們之間有一些細微的差別(從那以後,尋找源的jQuery我看到$ .getJSON只需調用$ .ajax)。
$.ajax({
url:"/challenge/results",
dataType: 'json',
data: form_data,
cache:false,
success: function(data, textStatus){
console.log("data!", data, textStatus);
});
但是唉!同樣的反應:
位置:陣列(1)成功
在這一點上,我必須承認 - 我開始有點傻,所以我想我會嘗試一些完全註定要失敗:
$.ajax({
url:"/challenge/results",
dataType: 'text',
data: form_data,
cache:false,
success: function(data, textStatus){
console.log("Parsed:!", $.parseJSON(data), textStatus);
});
出乎我的意料我的控制檯讀取:
位置:陣列(2)成功
我被難住了。在這一點上,我挖掘了自己的腳後跟並仔細研究了jQuery源代碼(1.4.2)。我想不出所料,ajax函數似乎不能處理json解析本身(儘管,我必須承認,我不能確定)。
我完全處於虧損狀態,爲什麼會發生這種情況 - 任何幫助表示讚賞。
當文本返回時,JSON的外觀如何?格式化相同? – 2011-02-18 21:10:02
是的,它與我在webkit檢查器中查看響應時的外觀完全一樣。 – idbentley 2011-02-18 21:11:36