2013-01-24 63 views
0

可能重複:
I have a nested data structure/JSON, how can I access a specific value?顯示JSON返回未定義

基本上我有一個返回的JSON對象是這樣的:

"products":[ 
    { 
     "id": "21102165", 
     "name": "Eliza J (3/4 sleeve ruched waist dress)", 
    }] 

我的方法,以顯示它:

function getCart(){ 
var json = $.getJSON('https://'+storedomain+'/cart?'+fcc.session_get()+'&output=json&callback=?'); 
alert(json['name']); 
} 

但是,警報顯示「未定義」。我在哪裏做錯了?

感謝

回答

4

$.getJSON回$ .Deferred對象,而不是一個結果

function getCart(){ 
    $.getJSON('https://'+storedomain+'/cart?'+fcc.session_get()+'&output=json&callback=?', function(data) { 
     console.log(data.products[0].name); 
    }); 
} 

你可以這樣做:

function getCart(){ 
    return $.getJSON('https://'+storedomain+'/cart?'+fcc.session_get()+'&output=json&callback=?'); 
} 

$.when(getCart()).then(function(data) { 
    console.log(data.products[0].name); 
}); 
+0

你是什麼意思由$ .Deferred對象? – user208709

+0

您還應該修復其他問題(data ['name']不起作用)。但是,對於主要問題,我需要+1。 –

+0

http://api.jquery.com/category/deferred-object/ – salexch

0

使用成功回調。

var jqxhr = $.getJSON("example.json", function(data, textStatus, jqXHR) { 
    alert("success"); 
}) 
.success(function(data, textStatus, jqXHR) { alert("second success"); }) 
.error(function() { alert("error"); }) 
.complete(function() { alert("complete"); }); 

getJSON API文檔。

0

你的方法應該是:

function getCart(callback) { 
    var url = 'https://'+storedomain + '/cart?'+fcc.session_get()+'&output=json&callback=?'; 
    $.getJSON(url, callback); 
} 

// Usage 
getCart(function(data) { 
    console.log(data.products); // array of car objects 
}); 

或者你可以使用遞延對象作爲salexch答案解釋。

您應該熟悉AJAX請求和回調函數的異步性質。