Javascript 如何将oData(来自DataTable)作为“发送”;“数据”;在我的Ajax通话中?

Javascript 如何将oData(来自DataTable)作为“发送”;“数据”;在我的Ajax通话中?,javascript,jquery,ajax,datatables,Javascript,Jquery,Ajax,Datatables,我有一个基于DataTable插件的Ajax表,它将搜索参数保存在localStorage中。现在一切都好了 a) console.debug(oData)返回: b) 这是我的脚本: var ShowUsers = function () { var Users = function () { var grid = new Datatable(); grid.init({ src: $("#datatable_ajax")

我有一个基于DataTable插件的Ajax表,它将搜索参数保存在localStorage中。现在一切都好了

a) console.debug(oData)返回:

b) 这是我的脚本

var ShowUsers = function () {

    var Users = function () {

        var grid = new Datatable();

        grid.init({
            src: $("#datatable_ajax")

            dataTable: {
                // save datatable state(pagination, sort, etc) in cookie.
                "bStateSave": true, 

                 // save custom filters to the state
                "fnStateSaveParams": function ( oSettings, sValue ) {
                    $("#datatable_ajax tr.filter .form-control").each(function() {
                        sValue[$(this).attr('name')] = $(this).val();
                    });

                    return sValue;
                },

                // read and populate the filter inputs
                "fnStateLoadParams": function ( oSettings, oData ) {
                    //Load custom filters
                    $("#datatable_ajax tr.filter .form-control").each(function() {
                        var element = $(this);
                        if (oData[element.attr('name')]) {
                            element.val( oData[element.attr('name')] );
                        }
                    });

                    return true;
                },

                "ajax": {
                    "url": "/admin/users", // ajax source
                    "data": {
                        name: oData.user_name // here is the problem
                    },
                    "headers": {
                        'X-CSRF-TOKEN': '{{ csrf_token() }}'
                    }
                }
            }
        });
    }

    return {
        init: function () {
            Users();
        }
    };
}();

jQuery(document).ready(function() {
    ShowUsers.init();
});
当我尝试在Ajax调用中使用oData作为变量时,就会出现问题

"ajax": {
    ...
    "data": {
        name: oData.user_name // return the Undefined error
    },
    ...
}
我尝试了很多解决方案,目前为止最好的方法是在fnStateLoaded中加载Ajax,如下所示:

"fnStateLoaded": function (oSettings, oData) {
  // Ajax here
},
var Users = function () {
    ...
}

oData = grid.getDataTable().ajax.params(); // get oData
grid.setAjaxParam("name", oData.name); // pass the parameter
grid.getDataTable().ajax.reload(); // reload the table
。。。但是它是无用的,因为我需要Ajax保持“Ajax”:{}而不是$.Ajax({})

话虽如此,关于如何获取和使用oData有什么建议吗

PS:我试图从输入中获取正确的数据,但当时fnStateLoadParams未能将数据传递给输入,因此$(“输入[name=user_name]”)。val()也返回未定义的

提前谢谢大家


David

您可以将
oData
分配给全局变量,也可以使用API方法检索Ajax调用中最后加载的状态

例如:

"ajax": {
    "url": "/admin/users", // ajax source
    "data": function(data, settings){
       var api = new $.fn.dataTable.Api( settings );

       var state = api.state.loaded();
       if(state.hasOwnProperty('user_name')){
          data.name = state.user_name;
       }
    },
    "headers": {
       'X-CSRF-TOKEN': '{{ csrf_token() }}'
    }
}

我为这个问题找到了一个简单明了的解决办法

grid.getDataTable().ajax.params()

在获得oData后,我将其传递给Ajax,如下所示:

"fnStateLoaded": function (oSettings, oData) {
  // Ajax here
},
var Users = function () {
    ...
}

oData = grid.getDataTable().ajax.params(); // get oData
grid.setAjaxParam("name", oData.name); // pass the parameter
grid.getDataTable().ajax.reload(); // reload the table

name:JSON.stringify(oData.user\u name)
??可能…仍然返回:未捕获引用错误:未定义oData我刚刚发现这一点,您可能会感兴趣: