2010-10-28 58 views
0

我試圖用jQuery訪問JSON數據並根據變量獲取特定的一組值。在使用[]之前,我已經完成了這個工作,但由於某種原因,我無法弄清楚這次發生了什麼問題。使用變量訪問JSON值

我的JSON文件(正在讀通過的getJSON,並命名爲jsonmaker.php)看起來是這樣的:

{"0107001":{"label":"Canada","x":"0","y":"0.34"},"0107002":{"label":"USA","x":"-0.16","y":"0.53"}} 

然後我有一個函數,基本上是這樣的:

function addAttrib(attrib) { 
$.getJSON("jsonmaker.php", function(data) { 
    alert(data[attrib].label); 
} 
} 

但不斷返回undefined。任何想法我做錯了什麼?我已經檢查確保var屬性爲0107001,沒有問題。另外,我知道我的JSON文件是一個PHP文件,所以我可以過濾返回的匹配attrib值的內容,但我期望開發一些可以純粹運行在HTML和JS上的東西,所以我可以打包該項目的JSON文件,並將其與我一起。無需web服務器瓦特/ PHP等

+0

當您查看Firebug或IE調試器中的「數據」變量時,它包含哪些**? – Pointy 2010-10-28 14:01:20

回答

2

數據訪問本身對我的作品:

var data = {"0107001":{"label":"Canada","x":"0","y":"0.34"},"0107002":{"label":"USA","x":"-0.16","y":"0.53"}}; 
var attrib = "0107002"; 
alert(data[attrib].label); // USA 

確保attrib AJAX請求完成,您的匿名回調函數被調用時,仍然調用的那一刻addAttrib()和瞬間之間不變。

更新:這是你的真實的代碼?您至少有一個語法錯誤:

function addAttrib(attrib) { 
    $.getJSON("jsonmaker.php", function(data) { 
     alert(data[attrib].label); 
    }); // <- Please note missing ");" 
} 
0

嘗試從數據表中的所有屬性,有一定正在返回的數據:

for (var p in data){ 
    if (data.hasOwnProperty(p){ 
    alert(data[p]); 
    } 
} 

這不是你的解決方案,但有了這個,你可以知道如何你的數據即將到來。

1

根據我的經驗,$.getJSON()並不總是返回一個對象。根據服務器與JSON一起返回的MIME類型,您最終可能會得到一個字符串而不是一個對象。檢查data包含的內容。如果是字符串,則必須使用eval()(舊式)或JSON.parse()(僅限新瀏覽器)手動解析。

+0

此外,如果對象不太複雜,請嘗試將其轉換爲字符串,並使用警報或提示來顯示它,以便您可以確切地看到它是什麼。我通常使用JSON.stringify來做到這一點(http://www.json.org/js.html)。 – Silkster 2010-10-28 14:13:53