Javascript 如何将oData(来自DataTable)作为“发送”;“数据”;在我的Ajax通话中?
我有一个基于DataTable插件的Ajax表,它将搜索参数保存在localStorage中。现在一切都好了 a) console.debug(oData)返回: b) 这是我的脚本: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")
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我刚刚发现这一点,您可能会感兴趣: