【问题标题】:MVC + Datatables error depending from number of table rowsMVC + Datatables 错误取决于表行数
【发布时间】:2018-01-19 14:33:13
【问题描述】:

我有一个 MVC 项目,它(通过控制器)连接到 MS SQL Server,获取数据集,并使用以下结构将其显示在 DataTables 上:

$(document).ready(function () {

        // Call table data from controller action
        $.getJSON("/Home/MyAction", { DateShow: "@ViewBag.TblCurrentDate" },
        function (json) {

            // Append each row to html table
            var tr;
            for (var i = 0; i < json.length; i++) {
                tr = $('<tr/>');
                tr.append("<td>" + json[i]["Column Name 1"] + "</td>");
                tr.append("<td>" + json[i]["Column Name 2"] + "</td>");
                tr.append("<td>" + json[i]["Column Name 3"] + "</td>");
...
                tr.append("<td>" + json[i]["Column Name 20"] + "</td>");

                $('#MyTable').append(tr);
            }

            // Set table name and apply datetable settings
            var dt_olktable = $('#MyTable').DataTable()
    });
});

因此,如果我从 SQL 中获取 1500 行和 20 列的数据集,它会完美运行(1-2 秒)。如果我有 2000 行或更多行,有 20 列,我会在 VS2015 诊断工具的事件部分看到一个“错误页面” - 就在事件“GET”/Home/MyAction“之后。我试图设置断点c# 控制器类。控制器已成功获取数据集,将其放入 json 并将 json 返回到之前显示的 jquery 代码。此外,Chrome 开发工具面板中没有错误。我所知道的:当我将断点设置为

var tr;

行,断点永远不会被触发,所以就在附近发生了一些事情

$.getJSON("/Home/MyAction", { DateShow: "@ViewBag.TblCurrentDate" },
            function (json) {

行。

如果我减少数据数量(例如 1500 行,20 列),一切正常!也许,2000 行 * 20 列对于使用客户端处理的 DataTables 来说太多了?或者可能有类似溢出的东西

for (var i = 0; i < json.length; i++) {

行?

【问题讨论】:

  • 在浏览器的调试工具中调试时,服务器对该AJAX请求的响应是什么?如果是“错误页面”,错误是什么?
  • 没有错误页面或类似的东西。下面的答案解释了原因。
  • 下面的答案在这方面具有误导性。浏览器中的调试工具可以显示服务器对 AJAX 请求的响应。你试过这样的调试吗?该问题表明未到达成功回调中的断点,因此似乎预期的响应没有从服务器返回。那么从服务器返回什么
  • 我试过 Crome 开发工具,但没有任何显示。我看到出现问题的唯一地方(浏览器中未完成的网页除外)是 Visual Studio(请参阅我的问题)。
  • “什么都没有显示” - 具体来说,你看到了什么? “什么都没有显示”是什么意思?服务器的响应是一个空白页面吗?响应的 HTTP 状态代码是什么?如果响应内容不包含任何有用的内容,Web.config 是否设置为不显示错误?如果你改变它会发生什么?

标签: jquery json asp.net-mvc datatables


【解决方案1】:

$.getJSON() 函数只有success 回调。它没有fail回调,所以如果有任何异常,它通常会静默失败,即使在调试中你也看不到错误。

把它改成$ajax(),给fail回调提供一个函数,在里面放一个断点,你就会看到错误了。

【讨论】:

    猜你喜欢
    • 2021-02-28
    • 2020-01-03
    • 2023-03-31
    • 2021-05-02
    • 1970-01-01
    • 2020-03-30
    • 2015-08-25
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多