基于ajax的jquery数据表将列发送为“columns”=>“[object Object]”

时间:2014-10-17 06:42:55

标签: jquery datatables

jQuery ajax数据表正在按以下数组发送过滤器的参数 如何更改它发送实际值和列名?

Parameters: {
"draw"=>"2", 
"columns"=>"[object Object],[object Object],[object Object],[object Object],[object Object],[object Object],[object Object],[object Object],[object Object],[object Object],[object Object],[object Object],[object Object]", "order"=>"[object Object]", 
"start"=>"0", 
"length"=>"10", 
"search"=>"[object Object]"
}

3 个答案:

答案 0 :(得分:3)

在Datatable配置中添加fnServerData。

 "fnServerData": function (sSource, aoData, fnCallback, oSettings) {

                $.ajax({
                    "dataType": 'json',
                    "type": "GET",
                    "url": "/Home/AjaxGetJsonData",
                    "data": oSettings.oAjaxData,
                    "Content-Type": "application/json",
                    "success": function (json) {
                       fnCallback(json);
                    }
                });

            }

答案 1 :(得分:2)

对我来说同样的问题。我发现原因是我过去设置的jquery jQuery.ajaxSettings.traditional = true 。删除此设置对我有用

答案 2 :(得分:0)

如果您使用的是fnServerData,那可能就是您的问题。您可以转而使用preXhr.dt。

var oTable = $('#my-table')
    .on('preXhr.dt', function ( e, settings, data ) {
        ...
    }).DataTable({
        "serverSide": "true",
        "ajax": '/indexData',
        ...
    });

这就是原因:

使用fnServerData会触发_fnBuildAjax函数中的一个部分,该部分将数据对象转换为数组。这反过来触发了jQuery.ajax中的逻辑,它期望"如果传入一个数组,则假设它是一个表单元素数组。"

因此它使用非常简单的非递归方法将参数转换为参数字符串。由于它是非递归的,因此第二级对象的转换就像[object + Object]一样,而不是它们的嵌套属性等。