【问题标题】:Jquery DataTable passing a parameter to ajax call asp.net. Invalid JSON primitiveJquery DataTable 将参数传递给ajax 调用asp.net。无效的 JSON 原语
【发布时间】: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 格式。但我不知道如何纠正它。

任何人都好心帮助。

【问题讨论】:

    标签: jquery json datatables json.net


    【解决方案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列,
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2016-02-07
    • 1970-01-01
    • 2011-05-13
    • 2021-09-29
    • 2012-11-18
    • 2010-12-27
    • 1970-01-01
    相关资源
    最近更新 更多