我做了一个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.
}
}
如果你有任何想法如何解决这个问题,请告诉我! 非常感谢。
答案 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);
});