Jquery DataTable将参数传递给ajax调用asp.net。 无效的JSON原语

下面是我的java脚本代码,用服务器数据填充我的HTML表,我正在使用Jquery DataTables来实现此目的。

function LoadData(result) { $('#example').DataTable({ "ajax": { "dataType": 'json', "contentType": "application/json; charset=utf-8", "type": "POST", "url": "index.aspx/Risky", "data": function (d) { return JSON.stringify( d ) //return JSON.stringify(result); // d.extra_search = result; //"extra_search": result }, "dataSrc": function (json) { return $.parseJSON(json.d); } }, "columns": [ { "data": "Prctice_Group_Risk_No" }, { "data": "Practice_Group" }, { "data": "Risk_Category" }, ] }); } 

下面是我的Web方法描述背后的代码

 [WebMethod] [ScriptMethod] public static string Risky() { return JsonConvert.SerializeObject(riskList); } 

到目前为止,它的工作正常,我的Web方法被调用,我的HTML表格被填充。

但我的问题是,我想将变量“result”作为参数传递给此ajax调用,以便我的Web方法接收它并返回基于此参数的特定数据。

我访问了https://datatables.net/reference/option/ajax.data,并尝试按照那里描述的所有方法通过我的ajax调用传递额外的数据,你可以在我的java脚本代码中看到三条注释行代码,我尝试了这三种不同的方式,但它没有一个对我有用,导致我遇到一个相同的问题,“ 无效的JSON原语 ”在我的firebug调试器中有500个服务器状态代码。 我可以在我的firebug调试器中看到传递给方法的参数是“extra_search = 123”

我可以从错误描述中猜测我添加这个额外参数的方式是不正确的,例如某种程度上它不能生成正确的json格式。 但我不知道如何纠正它。

有人帮忙。

试试这个:

 function LoadData(result) { $('#example').DataTable({ "ajax": { "url": "index.aspx/Risky", "data": function(d) { d.param1 = 'param1'; } }, "aoColumns": [ { "data": "Prctice_Group_Risk_No" }, { "data": "Practice_Group" }, { "data": "Risk_Category" } ] }); } 

在@Sanjay Kumar NS的帮助下和这个链接

https://datatables.net/forums/discussion/24546/ajax-data-invalid-json-primitive-error

我能够解决我的问题。 问题是没有有效的格式化JSON数据被发送到服务器,因此服务器抛出了“无效的JSON原语”的exception

以下是从DataTable函数中发送包含额外数据的ajax调用的正确格式

 function LoadData(result) { $('#example').DataTable({ "ajax": { "dataType": 'json', "contentType": "application/json; charset=utf-8", "type": "POST", "url": "index.aspx/Risky", "data": function (d) { return "{FileName:" + result+ "}"; }, "dataSrc": function (json) { return $.parseJSON(json.d); } }, "columns": [ { "data": "Prctice_Group_Risk_No" }, { "data": "Practice_Group" }, { "data": "Risk_Category" }, ] }); }