【问题标题】:Cannot load data into table with ajax无法使用ajax将数据加载到表中
【发布时间】:2018-10-30 14:14:46
【问题描述】:

我真的很难将现有代码从 3.5 升级到 4.0.5。 这一次,当我尝试使用 ajax 调用将数据加载到我的表中时,我遇到了一个错误。这在 3.5 中确实有效,所以我猜在版本 4 中发生了一些变化。我仔细阅读了文档并阅读了升级指南。 ajax 调用的方式是否发生了变化,以至于我的代码不能像在 3.5 中那样工作? 最后:我正在使用 jquery 的包装器。

表构造函数如下所示:

$("#PO-table").tabulator({
...columns etc
ajaxResponse: function (url, params, response) {


                        //url - the URL of the request
                        //params - the parameters passed with the request
                        //response - the JSON object returned in the body of the response.

                        return response.d; //Return the d Property Of a response json Object
                    },
});

然后我通过添加很多参数来设置数据,以及 之前声明的 ajaxconfig

var ajaxConfig = {
                type: "POST", //set request type to Position
                contentType: 'application/json; charset=utf-8', //set specific content type
            };

$("#PO-table").tabulator("setData", "PurchaseOrder.aspx/Fetch_PurchaseOrders", "{'POnum': '" + ponum + "', 'supplier': '" + supp + "', 'fromDate': '" + from + "', 'toDate': '" + to + "', 'spareNumber': '" + spare + "', 'isDelivered': '" + isdelivered + "', 'isConfirmedOrder': '" + true + "', 'isUnconfirmedOrder': '" + true + "', 'isExactPOnum': '" + false + "', 'isExactSupp': '" + false + "'}", ajaxConfig); 

然后我在控制台中收到错误,数据不会加载到表中:

【问题讨论】:

    标签: tabulator


    【解决方案1】:

    默认情况下,Tabulator 会将 POST 请求中的数据作为表单数据发送,如果您想将其作为 JSON 发送,则需要使用 ajaxContentType 选项

    var table = new Tabulator("#example-table", {
        ajaxURL:"http://www.getmydata.com/now", //ajax URL
        ajaxConfig:"POST", //ajax HTTP request type
        ajaxContentType:"json", // send parameters to the server as a JSON encoded string
    });
    

    这会将数据编码为 JSON 对象并设置适当的标头。

    ajaxContentType 选项是在 4.1 版中添加的,以便用户更轻松地将具有各种内容类型的请求发送回其服务器

    【讨论】:

    • 是的,不知何故,响应是 html,它似乎只是获取整个 aspx 页面。但为什么?这在 3.5 中有效。我将 ajaxConfig 包含在制表符对象中,但这没有帮助。似乎 fetch api 存在问题。我的 setdata 调用有什么需要调整的吗?
    • 正如我在上面的示例中提到的,区别在于通过的标头。 fetch api 只是一个用于访问 xhr 请求功能的浏览器标准功能。我建议您使用调试工具栏查看您的请求在 3.5 中用于发送标头的内容,并将其与 4.0 中发送的内容进行比较,并相应地更新标头
    • 好的,所以当我在 3.5 中使用您的代码 sn-p 时,它可以正常工作。在 4.0 中它不起作用。我得到错误。我比较了标题,并且存在差异。请求头是 100% 相似的,但是响应头明显不同,内容是 3.5 上的 application/json 和 4.0 上的 text/html。对我来说,这没有任何意义。后面的 aspx 代码没有被 4.0 调用,所以这意味着 ajax 在让服务器执行操作之前失败......有没有什么地方可以为我在网络选项卡中获得的标题提供屏幕截图?
    • 我实际上被引导相信问题在于内容类型标题。我们承诺 json 编码的字符串,但这不是从 setdata 发送的内容?我现在很困惑,很沮丧,从来没有找到解决办法..
    • 我的请求负载似乎在我的数据之前包含 WebKitFormBoundaryxxxx。这是问题吗?你知道这意味着什么吗?
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2019-08-21
    • 1970-01-01
    相关资源
    最近更新 更多