我使用此get调用从servlet返回json映射。我创建一个var i = 0;计算返回数据的用户。我可以像在jsondata[i]
中一样方便地使用i来访问返回的用户。但是下面我尝试在单击处理程序的嵌套函数中使用相同的json和var,它给出了未定义的信息。我看着C# using SendMessage, problem with WM_COPYDATA,它说:
每个函数都有自己的作用域,并且只能从该函数和任何嵌套函数访问该函数内声明的任何变量。由于JavaScript中的本地范围是由函数创建的,因此也称为函数范围。当我们将一个函数放到另一个函数中时,就会创建嵌套作用域。
那我为什么在点击处理程序中未定义?如果将console.log(jsondata[i]);
更改为console.log(jsondata[0]);
,则会看到正确的信息,而不是未定义的信息。
$.get("/lod1/Scuttlebutt",{name:"onload",data: -1},function(jsondata) {
var numberofusers = jsondata.length;
var i = 0;
$(".mate").each(function(index) {
//show
$(this).css("display","block");
//construct new id
var mateid = 'mate'+jsondata[i][0].userid;
//create ids for this mate
$(this).attr('id',mateid+"MateContainer");
$(this).find(".mateavatar").attr("id",mateid+"avatar");
$(this).find("#matename").attr("id",mateid+"Name");
$(this).find("#matepoints").attr("id",mateid+"Points");
$(this).find("#matesensignia").attr("id",mateid+"Ensignia");
$(this).find("#matebio").attr("id",mateid+"Bio");
$(this).find("#matesets").attr("id",mateid+"Sets");
$(this).find("#matebadges").attr("id",mateid+"Badges");
//fill in correct info
$(this).find("#"+mateid+"Name").text(jsondata[i][0].userName);
$(this).find("#"+mateid+"Points").text(jsondata[i][0].points);
$(this).find("#"+mateid+"Ensignia").attr('src',calculateEnsignia(jsondata[i][0].rank));
//add onclick handler to username
$(this).find("#"+mateid+"Name").on('click',function(){
console.log(jsondata[i]);
var num_tabs = $("div#tabmenu ul li").length + 1;
$("div#tabmenu ul").append(
"<li><a href='#tab" + mateid + "'>" + jsondata[i][0].userName + "</a></li>"
);
$("div#tabmenu").append(
"<div id='tab" + mateid + "'> NEW TAB!</div>"
);
$("div#tabmenu").tabs("refresh");
});
答案 0 :(得分:0)
此代码仅在点击事件之后有效
console.log(jsondata [i])
您可以做什么,可以使用任何其他方式确定行的索引,然后可以使用它来获取数据