如何正确加载使用JQuery数据表从Web方法的数据?(How to correctly reloa

2019-11-01 10:41发布

我使用jQuery 数据表插件以我的表工作,最近我切换到服务器端分页和过滤。 特别是,我有一个Web方法返回的数据来填充客户表:

    [WebMethod]
    [ScriptMethod(ResponseFormat = ResponseFormat.Json)]
    public string GetCustomers(string jsonAOData, int mode)
    {
        // ...
    }

在我的网页我用这个代码,通过AJAX调用来检索数据。

var grid = $('#grid').dataTable({
        bJQueryUI: true,
        bLengthChange: false,
        iDisplayLength: listItemsPerPage,
        bDestroy: true,
        "bProcessing": true,
        "bSort": true,
        "sPaginationType": "full_numbers",
        "bServerSide": true,
        "sAjaxSource": "/wsData/GetData.asmx/GetCustomers",
        "fnServerData": function (sSource, aoData, fnCallback) {

            var jsonAOData = JSON.stringify(aoData);

            $.ajax({
                //dataType: 'json', 
                contentType: "application/json; charset=utf-8",
                type: "POST",
                url: sSource,
                data: "{jsonAOData : '" + jsonAOData + "', mode:'0'}",
                success: function (msg) {
                    fnCallback(JSON.parse(msg.d));
                },
                error: function (XMLHttpRequest, textStatus, errorThrown) {
                    alert(XMLHttpRequest.status);
                    alert(XMLHttpRequest.responseText);
                }
            });
        },
        "aoColumnDefs": [
            // my columns structure
        ]
    });

正如你所看到的,我传递到Web方法两个参数: jsonAOData ,所有的信息,分页和过滤,以及mode ,定义如何从数据库获取数据。 它完美的作品,但现在我需要在我的表reaload数据传递给我的web方法不同的价值mode

阅读文档,我发现fnReloadAjax()函数可以帮助我,但我无法找到将它应用到我的问题的正确方法。

我想是这样的:

grid.fnReloadAjax("/wsData/GetData.asmx/GetCustomers?mode=1");

但简化版,它的工作。 你能帮助我吗? 我哪里做错了吗?

我怎样才能通过新的参数传递给我的网页的方法?

Answer 1:

不能立即发现缺什么/错 - 但是这是我的版本的作品。

$(document).ready(function () {
        jQuery.support.cors = true;

        var sAjaxSourceUrl = '@ViewBag.sAjaxSourceUrl' //passing mine from MVC3 viewbag, but you can hard-code it
        var dt = $('#dataTable').dataTable({
            "bProcessing": true,
            "bSort": true,
            "bServerSide": true,
            "sServerMethod": "POST",
            "sAjaxSource": sAjaxSourceUrl,
            "fnServerData": function (sSource, aoData, fnCallback) {
                var jsonAOData = JSON.stringify(aoData);
                $.ajax({
                    crossDomain: true,
                    type: "POST",
                    url: sSource,
                    data: jsonAOData,
                    dataType: "json",
                    contentType: "application/json; charset=utf-8",
                    success: function (data) {
                        fnCallback($.parseJSON(data));
                    },
                    error: function (XMLHttpRequest, textStatus, errorThrown) {
                        alert("Status: " + XMLHttpRequest.status + "\r\n" + textStatus + "\r\n" + errorThrown);
                    }
                });
            },
            "aoColumnDefs": [
// my columns structure
],
            "sScrollY": "500",
            "bScrollCollapse": true
        });


Answer 2:

我发现fnReloadAjax()不为我工作这么好。 所以,以下一些论坛,我决定使用fnDraw()

我定义一个全局变量mode ,我根据数据我想找回稳定物价。 然后,我调用fnDraw() 从Web方法表重新绘制加载数据。

在AJAX调用我设置:

data: "{jsonAOData : '" + jsonAOData + "', mode:'" + mode +"'}",


文章来源: How to correctly reload data from web method using JQuery DataTables?