我一直在使用最近发布的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
    }
  ]
}


由于成功函数调用中的某些原因,for循环在数组中存储的两个对象上循环,但警报始终显示"undefined is locked undefined"。有人知道我的处理程序或返回的JSON有什么问题吗?

提前致谢。

最佳答案

您应该使用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"); }
});

10-02 01:20