【问题标题】:Strange problem with Page Method JSON result页面方法 JSON 结果的奇怪问题
【发布时间】:2010-04-29 18:05:19
【问题描述】:

我有以下 JavaScript 来填充下拉列表。当我单步进入populateResourceList 时,jsonList 的值显示在代码下方。但是,此方法在 for 语句上失败,错误为 jsonList.Table is undefined

我做错了什么?

function populateResourceList(jsonList) {
  var listItems = "";
  for (var i = 0; i < jsonList.Table.length; i++) {
    listItems += "<option value='" + jsonList.Table[i].id + "'>" + jsonList.Table[i].name + "</option>";
  }
  $("#<%=resourceList.ClientID %>").html(listItems);
};

$(function() {
  var sessionId = 554;
  var x = PageMethods.GetFreeResources(sessionId, function(result, response, context) {
    populateResourceList(result);
  });
});

编辑: jsonList 看起来像这样:

{
  "Table": [{
    "id": "1",
    "name": "Billy Bester"
  }, {
    "id": "2",
    "name": "Marlene Smith"
  }, {
    "id": "3",
    "name": "John Mills"
  }, {
    "id": "4",
    "name": "Brady Kelly"
  }, {
    "id": "5",
    "name": "Andrew Peel"
  }, {
    "id": "6",
    "name": "Colin Clifford"
  }, {
    "id": "7",
    "name": "Kerri Steele"
  }, ]
}

【问题讨论】:

    标签: asp.net javascript json


    【解决方案1】:

    你确定它是文字而不是字符串吗?

    试试这个,让我知道。 eval 是邪恶的,但它会告诉我们这是否是我们想要去的方向。

    function populateResourceList(jsonList) {
        eval("var list=" + jsonList + ";");
        var listItems = "";
        for (var i = 0; i < list.Table.length; i++) {
            listItems += "<option value='" + list.Table[i].id + "'>" + list.Table[i].name + "</option>";
        }
        $("#<%=resourceList.ClientID %>").html(listItems);
    };
    

    【讨论】:

    • 什么,jsonList?这是一个字符串值,我只是将其粘贴不带引号,以明确哪些引号实际上是它的一部分,以及它的周围。
    • @ProfK - 看起来您正在使用 MSAJAX,它具有可用于反序列化 json 的 Sys.Serialization.JavaScriptSerializer。可能会问一个问题:为什么要从页面方法返回一个字符串?只返回对象,msajax 会在返回时给你一个 javascript 对象?我错过了什么吗?
    • 我返回一个字符串,因为我将我的 json 构建为一个字符串。序列化程序很好用,谢谢两次。
    猜你喜欢
    • 2012-08-02
    • 1970-01-01
    • 2021-08-03
    • 2013-12-18
    • 1970-01-01
    • 1970-01-01
    • 2014-08-17
    • 1970-01-01
    • 2019-05-24
    相关资源
    最近更新 更多