【问题标题】:How to pass extra parameter on AJAX call of jQuery DataTable如何在 jQuery DataTable 的 AJAX 调用中传递额外的参数
【发布时间】:2017-02-12 13:28:29
【问题描述】:

我使用DataTable Documentation 上指示的以下代码传递参数。


查看:

$('#example').dataTable( {
      "ajax": {
           "url": "/Student/GetStudents",
           "data": function ( d ) {
               d.test= "some data";
           }
      }
});

控制器:

public ActionResult GetStudents(JQueryDataTableParamModel param, string test)
{
    //code omitted for brevity

    return Json(new
    {
        sEcho = param.sEcho,
        iTotalRecords = allRecords.Count(),
        iTotalDisplayRecords = filteredRecords.Count(),
        aaData = result
    },
    JsonRequestBehavior.AllowGet);
}

虽然将“test”参数传递给Controller,但“param”参数中的值为null或0,导致数据表返回null数据。另一方面,如果我在数据表参数中使用以下行而不是 AJAX 调用,则 param 的所有值都会正确传递给 Controller(但使用 AJAX 调用并且此行也会导致错误)。我需要将额外的参数传递给控制器​​并且必须使用 AJAX 调用。传递参数值时如何传递它?

"ajaxSource": "/Student/GetStudents",

【问题讨论】:

  • 关于这个问题的任何想法???

标签: javascript jquery asp.net-mvc datatable datatables


【解决方案1】:

最后我使用 fnServerData 方法 解决了这个问题,如下所示。

"ajaxSource": "/Student/GetStudents",

//fnServerData used to inject the parameters into the AJAX call sent to the server-side
"fnServerData": function (sSource, aoData, fnCallback) {
    aoData.push({ "name": "test", "value": "some data" });
    $.getJSON(sSource, aoData, function (json) {
        fnCallback(json)
    });
},

...

无论如何,非常感谢您提供有用的答案。投票+有用的...

【讨论】:

  • 非常感谢!你救了我的一周!!! DataTables 的新版本(2018 年 11 月)不适用于 ajax {data: function() }.... 发布到服务器的 JSON 的新结构比旧版本好,但我做了一个小代码来转换为新的结构体。当他们修复这个错误时,我将计划使用新的 ajax.data。
【解决方案2】:
var finalArray = [];
var data = {'test':"some data","test1":"some data1"};
finalArray.push(data);
var rec = JSON.stringify(finalArray);

$('#example').dataTable( {
"ajax": {
   "url": "/Student/GetStudents",
   "data": rec
}
});

public ActionResult GetStudents(JQueryDataTableParamModel param,string test)
{
//code omitted for brevity

 //printing in params in controller with asp.net code. 
 print_r(json_decode(param));

return Json(new
{
    sEcho = param.sEcho,
    iTotalRecords = allRecords.Count(),
    iTotalDisplayRecords = filteredRecords.Count(),
    aaData = result
},
JsonRequestBehavior.AllowGet);
}

【讨论】:

    【解决方案3】:

    您的 javascript 代码:

    $('#example').dataTable( {
          "ajax": {
               "url": "/Student/GetStudents",
                type: 'GET',
                data: {
                        test1: "This test1 data ",
                        test2: "This test2 data"
                    }
            }
    });
    
    
    public ActionResult GetStudents(JQueryDataTableParamModel param, string test)
    {
        //code omitted for brevity
    
         //printing in params in controller with asp.net code. 
         print_r("Data from" ,param.test1 ,param.test2);
    
        return Json(new
        {
            sEcho = param.sEcho,
            iTotalRecords = allRecords.Count(),
            iTotalDisplayRecords = filteredRecords.Count(),
            aaData = result
        },
        JsonRequestBehavior.AllowGet);
    }
    

    【讨论】:

    • 关于this问题的任何想法?
    【解决方案4】:

    您可以创建一个 json 数据字符串,您可以在其中传递额外的参数。

    var data = {'test':"some data","test1":"some data1"};
        $('#example').dataTable( {
        "ajax": {
           "url": "/Student/GetStudents",
           "data": data
        }
    });
    

    【讨论】:

    • 我已经可以将参数传递给控制器​​,但这会导致参数参数被传递为 null 或 0。通过使用您的示例,会出现相同的结果,我只需要传递参数值而不需要 "ajaxSource": "/Student/GetStudents" 行。有什么想法吗?
    • 使用 JSON.stringify(data) 并发送数据。在控制器端使用 JSON.parse(params) 解析参数。检查它是否工作..?
    • 能否请您通过这种方法更新您的答案,同时指出:AJax 调用和控制器(stringfy 转换)。
    • 关于this问题的任何想法?
    猜你喜欢
    • 2021-09-29
    • 1970-01-01
    • 1970-01-01
    • 2016-02-07
    • 1970-01-01
    • 2014-03-25
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多