【问题标题】:How can I use AJAX with web methods to send JSON objects to a jQuery DataTable using asp.net?如何使用 AJAX 和 Web 方法将 JSON 对象发送到使用 asp.net 的 jQuery DataTable?
【发布时间】:2016-11-07 17:46:18
【问题描述】:

所以我有使用 AJAX 的 jQuery 数据表来调用这种格式的 JSON。

 $(document).ready(function () {

            $('#test').DataTable({
                ajax:{
                    url:"players.json",
                    dataSrc:""
                  },
                columns: [
                    {data: "id"},
                    { data: "player" },
                    { data: "points" },
                    { data: "steals" },
                    { data: "blocks" },
                    { data: "assists" },
                    { data: "MPG" },
                    { data: "shot %" },
                    { data: "3 %" }
                ]


            });
        });

我的 aspx.cs 文件有一个创建 JSON 文件的方法。

[System.Web.Services.WebMethod]
        public static void loadTable()
        {
            NBAPlayerRepository players = new NBAPlayerRepository();
            DataTable dt = players.GetAll();
            var json = dt.ToJson();
            System.IO.File.WriteAllText(@"C:\Users\wheres\Downloads\nbaStats\nbaStats\nbaStats\players.json", json);
        }

JSON 看起来像这样:

[{"id" : "67926aa7-46b7-4418-96db-fc7e5216aac4","playername" : "Wilson Heres","points" : "34534","steals" : "34","blocks" : "34","assists" : "343","mpg" : "343","shootingpercentage" : "33.3429985046387","threepointpercentage" : "33.3429985046387"}
,{"id" : "6dc42e0b-8750-463d-a9ef-5a025a27154b","playername" : "Wilson Heres","points" : "34534","steals" : "34","blocks" : "34","assists" : "343","mpg" : "343","shootingpercentage" : "33.3429985046387","threepointpercentage" : "343.334014892578"}
,{"id" : "f727130c-5b94-4730-a653-cfb603c73b8a","playername" : "Wilson Heres","points" : "34534","steals" : "34","blocks" : "34","assists" : "343","mpg" : "343","shootingpercentage" : "33.3429985046387","threepointpercentage" : "343.334014892578"}
]

但现在我收到此错误“jquery.dataTables.min.js:48 Uncaught TypeError: Cannot read property 'length' of undefined”

编辑:现在一切正常。只需要添加 dataSrc:""

【问题讨论】:

  • 你所说的“得到一个空白屏幕”是什么意思?实际上是什么都没有显示(一个完整的白页)还是只是您的数据没有正确显示?此外,一个直接的问题是您的 . 中必须有 和 标签
  • @ChrisH。是的,甚至什么都没有出现。不知道为什么会这样。他们不这样做 here 并且它有效。查看 jsfiddle 以获取示例。
  • 关于该示例需要注意的一点是,它基于旧版本的 DataTables(因此使用 aaData 而不是数据等)。如果您使用的是 1.10.x,则只想使用 datacolumns 标记,而不使用匈牙利符号。至于那个链接的例子,它们根本不显示 HTML,这就是你看不到
  • 和 标记的原因。你肯定需要它们在 HTML 中:link
  • @ChrisH。哦好的。这就说得通了。我添加了
  • 标签并且它们显示出来了,但是正文的内容不应该由数据表处理吗?我正在尝试自动提取所有数据并能够从 html 页面对其进行编辑。
  • 是的,内容应该由 DataTable 处理,但是一旦从服务器中提取数据,它需要这些标签知道将数据放在哪里。我目前正在编写您的 DataTables 初始化的清理版本,因此请在发布后查看它。

标签: html asp.net json ajax datatables


【解决方案1】:

数据表初始化的清理版本

 $(document).ready(function () {

        $('#test').DataTable({
            ajax: {
                url: "players.aspx/loadTable"
            },
            columns: [
               { data: "id" },
               { data: "player" },
               { data: "points" },
               { data: "steals" },
               { data: "blocks" },
               { data: "assists" },
               { data: "MPG" },
               { data: "Shot %" },
               { data: "3 %" },
            ]

    });
});

这似乎是从您的代码中删除了很多东西,所以让我对更改的内容进行一些解释/假设。

假设

  • 首先,假设:DataTables 在第一次从表中获取数据时,总是会尝试使用GET 请求,而不是POST,因此请确保您的数据处理代码期望这样。
  • 我还假设您并不强烈希望将 Ajax 与初始化分开,而这正是您第一次尝试时决定这样做的原因。如果是这种情况,请告诉我,我会更新代码以匹配它。

说明

您的格式在某些方面不正确,而在其他方面不符合 DataTables 标准,因此此版本应该以更简单的形式完成您尝试执行的大部分操作。您的许多 Ajax 选项是不必要的,因为它们已经是默认值(例如,数据类型为 JSON),这就是它们被删除的原因。

DataTables 的一个优点是您可以在初始化时使用 Ajax 选项,这就是我在这里所做的。您确实丢失了成功和失败回调,但我认为出于调试目的,它们并不是真正必要的,并且有任何额外的代码会增加要调试的东西的数量(我什至在我的大部分最终代码中都没有使用这些回调)。

大多数其他更改主要是不正确的命名法(例如,在列定义中使用data 而不是title

免责声明

虽然我一般建议这些更改只是为了改进您的代码,但我会确保查看与服务器发送和接收的 JSON 格式。如果您不知道该怎么做,我建议您下载 Fiddler 以“收听”正在发送的 JSON 数据。

如果您的 JSON 有误,那么对页面的任何更改都不会使表格出现。

最后,确保页面上没有 JS 错误。使用浏览器的开发者控制台 (F12) 进行检查。

如果您确实发现任何 JS 错误,请将它们发布在您的问题中。我还建议发布发送到问题的 JSON 数据,以便我们确保格式正确。

【讨论】:

  • 是的,我的 JSON 搞砸了,但您的修复实际上是现在尝试获取一个,所以至少我现在少了一个问题。感谢您的帮助。
  • web 方法适用于创建 JSON 对象,但 jquery 不调用它。那么我是否需要让 loadTable 方法创建一个文件以便 DataTable 可以访问它?
  • 好的,所以我将数据加载到文件中,然后 jQuery 请求它。我将用 JSON 的格式更新问题。
猜你喜欢
  • 1970-01-01
  • 2013-05-21
  • 2011-02-08
  • 2010-11-11
  • 1970-01-01
  • 2018-11-21
  • 2016-11-11
  • 1970-01-01
  • 2012-06-12
相关资源
最近更新 更多