2012-04-02 40 views
0

我有一個返回JSON(networks_function.php建立了一些陣列,並將它們編碼爲JSON)的函數:的Json不警覺的語句和功能之間是一致的

var json; 
$(document).ready(function(){ 
    $.post("network_function.php", function(data) { 
     json = data; 
     alert(json); 
    }); 
}); 

我的JSON變量傳遞到一個新的功能,不正確地解釋它。但是,當我將警報語句的文本和硬編碼複製到第二個函數(並將其設置爲等於json變量)時,它就可以工作。我確定這不是變量範圍的問題。有人知道這可能是爲什麼嗎?

+1

從不使用警報進行調試。改用'console.log(data)'。如果控制檯顯示一個對象,這是很好的JSON。 – Joseph 2012-04-02 06:09:52

回答

0

它認爲它不是JSON。只要告訴jQuery的,它的JSON數據:

var json; 
$(document).ready(function(){ 
    $.post("network_function.php", function(data) { 
     json = data; 
     alert(json); 
    }, "json"); 
}); 

是複製和粘貼它的工作原理是因爲當粘貼到一個JS背景下,JSON字符串是一個對象字面的原因。當你提醒一個實際的對象時(這是你想要提醒的),你會看到「對象」,並且可能會有一些調試信息取決於瀏覽器。

需要注意的是,你可以(也應該)也發出JSON頭在你的PHP文件

header("Content-Type: application/json"); 
+0

仍然無法正常工作。我在jQuery的末尾包含了「json」字符串,但沒有任何變化。我仍然將其從警報功能中複製出來,並且工作正常,所以我仍然不確定發生了什麼問題。 – user1114864 2012-04-02 06:10:59

+0

@ user1114864對不起,剛纔意識到我把json放在了錯誤的地方。我現在編輯了我的答案,它應該工作。 – Corbin 2012-04-02 06:13:02

+0

工作!巨大的幫助! – user1114864 2012-04-02 06:15:15

0

我看你使用PHP在後端。 你可能會想這樣做:

後端:

$dataToSend = array("item1"=>"data1","item2"=>"data2"); 
echo json_encode($dataToSend); 

然後,您可以得到jQuery的「數據」作爲JSON對象。 如果PHP它返回一個字符串 只要做到:

json = JSON.parse(data); 

你的PHP主要是沒有正確返回JSON所以在你的字符串中的引號在你的迴音可能是一個問題。這使得在返回JSON時在php中使用正確的引號變得單調乏味,因此對數組使用json_encode()將是最簡單的方法。