我一直在玩最近发布的jQueryGannt插件/应用程序from here,我正在尝试编写一个下拉列表,其中填充了服务器上不同存储的甘特图的名称。要生成此下拉列表,我使用此函数:
$.ajax({
url: "GanttLoader.ashx?action=getGantts",
context: document.body,
type: "GET",
dataType: "json",
success: function(data) {
if(data.gantts != null) {
for(var gantt in data.gantts) {
alert(gantt.name + " is locked " + gantt.locked);
var toAppend = $("<option/>").val(gantt.name).html(gantt.name);
if(gantt.locked) { toAppend.attr("disabled", "disabled"); }
$("#saved_gantts").append(toAppend);
}
$("#saved_gantts").append($("<option/>").val("add new").html("add new"));
saved_gantts_loaded = true;
}
else if(data.status == "none") {
$("#saved_gantts").append($("<option/>").val("add new").html("add new"));
}
},
error: function() { alert("couldn't load gantt charts"); }
});
目前,这是服务器发送以生成下拉列表的内容(尚未发送任何甘特数据,只是一个简单的列表,其中列出了哪些甘特正在打开以及哪些正在进行编辑):
{
"gantts": [
{
"name": "other",
"locked": true
},
{
"name": "test",
"locked": true
}
]
}
由于某些原因,在success函数的调用中,for循环遍历存储在数组中的两个对象,但警报始终打印"undefined is locked undefined"
。有人知道我的处理程序或我的JSON被返回有什么问题吗?
提前致谢。
答案 0 :(得分:3)
您应该使用data.gantts[gantt].name
代替gantt.name
。
这是更新的代码:
$.ajax({
url: "GanttLoader.ashx?action=getGantts",
context: document.body,
type: "GET",
dataType: "json",
success: function(data) {
if(data.gantts != null) {
var gantts = data.gantts;
for(var i in gantts) {
alert(gantts[i].name + " is locked " + gantts[i].locked);
var toAppend = $("<option/>").val(gantts[i].name).html(gantts[i].name);
if(gantts[i].locked) { toAppend.attr("disabled", "disabled"); }
$("#saved_gantts").append(toAppend);
}
$("#saved_gantts").append($("<option/>").val("add new").html("add new"));
saved_gantts_loaded = true;
}
else if(data.status == "none") {
$("#saved_gantts").append($("<option/>").val("add new").html("add new"));
}
},
error: function() { alert("couldn't load gantt charts"); }
});
答案 1 :(得分:1)
您可能想要使用
for (i=0;i<data.gantts.length;i++) {
alert(data.gantts[i] + " is locked " + data.gantts[i].locked);
在处理某些框架时,我发现for(... in ...)格式有点不可靠