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

Posted

技术标签:

【中文标题】Jquery DataTable 将参数传递给ajax 调用asp.net。无效的 JSON 原语【英文标题】:Jquery DataTable passing a parameter to ajax call asp.net. Invalid JSON primitive 【发布时间】:2016-02-18 13:54:43 【问题描述】:

下面是我用服务器数据填充我的 html 表的 java 脚本代码,我正在使用 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 格式。但我不知道如何纠正它。

任何人都好心帮助。

【问题讨论】:

【参考方案1】:

在@Sanjay Kumar N S 和此链接的帮助下

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

我可以解决我的问题。问题是没有有效的格式化 JSON 数据被发送到服务器,因此服务器抛出“无效 JSON 基元”异常

以下是从 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" ,
]
);

【讨论】:

谢谢,这对我有很大帮助!多年来一直在寻找同样的问题=)【参考方案2】:

试试这个:

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,同样的问题,500 服务器状态码和无效的 json 原语 500是服务器相关问题,能否验证数据是否到达服务器?您也可以尝试删除 dataSrc 吗? Web 方法永远不会被调用,错误是“无效的 json 原语”我已经用谷歌搜索过了,有很多关于这个问题的线程,每个线程都说明它的 json 格式的问题.如果我将“d.param1 =”ur data”行替换为“return JSON.stringify(d)”代码工作正常,我猜dataSrc没有问题 你能检查一下编辑后的答案吗?这里你指定要发送的内容类型是 json,所以要确保 d.param1 是 json 格式。 Hello Sanjax 我已经尝试过这个 d.param1 = JSON.parse( "param":"Helloworld" ) 它现在向我抛出了一个错误,即 SyntaxError: JSON.parse: unexpected character at JSON数据的第1行第2列,

以上是关于Jquery DataTable 将参数传递给ajax 调用asp.net。无效的 JSON 原语的主要内容,如果未能解决你的问题,请参考以下文章

将参数传递给 AJAX 以绑定 DataTable 不起作用

如何通过不提交当前会话事务将 DataTable 作为参数传递给存储过程?

在 ajax 调用中使用 datatable url 属性将参数传递给服务器

.Net 将对象列表作为参数传递给 JQuery

将参数传递给 JQuery 函数

jQuery UI 问题。如何将参数传递给函数