0

JQuery DataTablesプラグインを使用してテーブルを操作していますが、最近、サーバー側のページ付けとフィルタリングに切り替えました。特に、顧客テーブルにデータを入力するためにデータを返す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メソッドに2つのパラメーターを渡します。jsonAODataページ付けとフィルタリングのすべての情報を含むパラメーターとmode、DBからデータをフェッチする方法を定義するパラメーターです。完全に機能しますが、テーブル内のデータを再ロードして、Webメソッドに別の値を渡す必要がありますmode

私が見つけたドキュメントを読むfnReloadAjax()ことは私を助けることができました、しかし私はそれを私の問題に適用する正しい方法を見つけることができません。

私はこの方法を試しました:

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

しかし、それは機能しません。手伝って頂けますか?どこが間違っているのですか?

新しい引数をWebメソッドに渡すにはどうすればよいですか?

4

2 に答える 2

0

何が欠けているか/間違っているかをすぐに見つけることはできません-しかし、これは動作する私のバージョンです。

$(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
        });
于 2013-01-17T10:42:53.530 に答える
0

fnReloadAjax()私は自分にとってあまりうまくいかないことを発見しました。そこで、いくつかのフォーラムに続いて、を使用することにしましfnDraw()た。

mode取得したいデータに応じて値を付けるグローバル変数を定義しました。次に、を呼び出しfnDraw()ます。テーブルは、Webメソッドからデータをロードして再描画されます。

AJAX呼び出しで私は設定しました:

data: "{jsonAOData : '" + jsonAOData + "', mode:'" + mode +"'}",
于 2013-01-17T14:48:16.977 に答える