Jquery Json动态变量名生成

时间:2009-09-27 02:56:11

标签: jquery json dynamic variables

我做了一个jquery .ajax调用,我期待一个json结果。 问题是,如果有5位作者,我会得到author_details_0,author_details_1,author_details_2等等。我怎样才能动态构造要从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.
        }
    }

如果你有任何想法如何解决这个问题,请告诉我! 非常感谢。

5 个答案:

答案 0 :(得分:5)

您可以通过两种方式访问​​对象属性。首先是点符号,如object.property。您也可以使用括号表示法,如对象['property']。这里不需要评估:

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

This page在底部解决了您的假设。

答案 1 :(得分:2)

解决了!

而不是使用“临时” - temp ='author_details_'+ i; 然后做 - 的eval(jsonData.temp)

这就是 - eval(“jsonData.author_details_”+ i)

由于数据来自数据库,所以它是安全的,因为我在检查后将所有内容都放在数据库中。因此,eval不会构成安全威胁。

如果你有更多的解决方案,我很高兴听到它们!

答案 2 :(得分:0)

为什么不将json存储为数组?而不是:

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

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

然后您可以使用author_details [i]。

访问它

答案 3 :(得分:0)

遇到jQuery和$ .ajax函数的问题。通过在$ .ajax函数之外定义'data'对象来解决:

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');
            }
});

答案 4 :(得分: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);
});