2009-09-27 155 views
-1

我做了一個jQuery的.ajax調用,我期待json的結果。 問題是,如果有5位作者說,我會得到author_details_0,author_details_1,author_details_2等....我怎樣才能動態構建變量的名稱從json中檢索?我不知道我會得到多少位作者,可能會有數百位。Jquery Json動態變量名稱生成

$.ajax({ 
type: "POST", 
url: "/authordetails/show_my_details/", 
data: af_pTempString, 
dataType: "json", 
beforeSend: function() { 
}, 
success: function(jsonData) { 
    console.log("Incoming from backend : " + jsonData.toSource()); 
    if(jsonData.AuthorCount) 
    { 
     console.log("Number of Authors : " + jsonData.AuthorCount); 
     for (i = 0; i < jsonData.AuthorCount; i++) 
     { 
      temp = 'author_details_' + i; <-------------------This is the name of the variable I'm expecting. 
      console.log("Farm information : " + eval(jsonData.temp)); <----- This doesn't work, how can I get jsonData.author_details_2 for example, 'coz I don't know how many authors are there, there could be hundreds. 
     } 
    } 

請讓我知道,如果你有任何想法如何解決這個問題! 非常感謝。

+0

爲什麼你需要author_details_0,1,2,等等? – yoda 2009-09-27 03:00:18

+0

你是如何生成json的? – Eric 2009-09-27 18:52:01

+0

我在後端使用dJango。我創建的數據模型具有作者和相關的Author_Details表。給定發佈者ID,我查詢並獲取我簡單序列化的作者集 - json_serializer.serialize(allAuthors,ensure_ascii = False)。 這不會序列化作者詳細信息,因此我必須遍歷作者對象數組並手動創建它們,因此author_details_XX其中XX是作者主鍵。 我不確定是否有辦法將Author和其他細節綁定爲單個JSON Array對象。如果有的話,我會很高興地翻新我的代碼,因爲它更乾淨。 – PlanetUnknown 2009-12-18 18:50:31

回答

5

您可以通過兩種方式訪問​​對象屬性。首先是點符號,如在object.property中。您也可以使用括號表示,如在對象['property']中。無需EVAL這裏:

var propName = 'author_details_' + i; 
alert('Details for author ' + i + ' = ' + jsonData[propName]; 

This page地址,你的假設,在底部。

+0

這也行!謝謝巴拿巴,我在這裏學到了一些東西! – PlanetUnknown 2009-09-27 12:08:05

2

解決了!

而不是使用「temp」 - temp ='author_details_'+ i; ,然後做 - 的eval(jsonData.temp)

就在這個工程 - 的eval( 「jsonData.author_details_」 + I)

由於數據是從數據庫中,它是安全的,因爲我把一切在數據庫中檢查後。因此,eval不會構成安全威脅。

如果您還有其他解決方案,我很樂意聽到他們的聲音!

0

爲什麼不把json存儲爲數組?而不是:

{ 
    "author_details_1": 
    { 
     ... 
    }, 
    "author_details_2": 
    { 
     ... 
    }, 
    "author_details_3": 
    { 
     ... 
    }, 
    "author_details_4": 
    { 
     ... 
    } 
    ... 
} 

嘗試

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

然後你就可以用author_details [I]訪問它。

+0

謝謝埃裏克。讓我嘗試一下。 – PlanetUnknown 2009-09-27 12:06:11

0

得到了jQuery和$ .ajax函數的問題。通過定義 '數據' 對象中的$就功能外解決:

var data = new Object(); 
data.ContentNodeID = button.siblings('.ContentNodeID').val(); 
data.ContentObjectID = button.siblings('.ContentObjectID').val(); 
data.ActionAddToBasket = ''; 
data['eZOption['+$('[name=printFormatAttributeId]').val()+'][]'] = $('.eZOption').val(); 

$.ajax({ 
    cache: false, 
    type: 'POST', 
    url: button.parent().attr('action'), 
    data: data, 
    success: function(data){ 
       button.siblings('.addtobasket_success').css('display', 'inline'); 
       $('#shop_button').removeClass('disabled'); 
       $('#shop_button').removeAttr('disabled'); 
      }, 
    error: function(data) { 
       button.siblings('.addtobasket_failure').css('display', 'inline'); 
      } 
}); 
0
url = './json/demo_'+var+'.net'; 
$.getJSON(url, function(result){ 
    alert(result[0].name); 
}); 

OR

$.getJSON('./json/demo_'+var+'.net', function(result){ 
    alert(result[0].name); 
});