【问题标题】:JSON data unable to properly serialize in jQueryJSON数据无法在jQuery中正确序列化
【发布时间】:2012-08-30 20:32:56
【问题描述】:

我一直在玩最近发布的 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 有什么问题吗?

提前致谢。

【问题讨论】:

    标签: c# jquery ajax json ashx


    【解决方案1】:

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

    【讨论】:

      【解决方案2】:

      你可能想使用

      for (i=0;i<data.gantts.length;i++) {
          alert(data.gantts[i] + " is locked " + data.gantts[i].locked);
      

      我发现 for(... in ...) 格式在处理某些框架时有些不可靠

      【讨论】:

        猜你喜欢
        • 2020-05-03
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2020-01-15
        • 2018-04-22
        相关资源
        最近更新 更多