[英]How can I send oData (from DataTable) as “data” in my Ajax Call?
I have an Ajax Table based on DataTable plug-in, which keep search parameters in localStorage. 我有一个基于DataTable插件的Ajax表,该插件将搜索参数保留在localStorage中。 All good by now. 现在一切都很好。
a) console.debug( oData ) returns: a) console.debug( oData )返回:
Object
...
time : 1488468181954
name : "John Doe"
...
b) And here is my script : 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();
});
The problem appear when I try to use oData as a variable in the Ajax Call. 当我尝试在Ajax调用中使用oData作为变量时,会出现问题。
"ajax": {
...
"data": {
name: oData.user_name // return the Undefined error
},
...
}
I was trying many solutions, the best so far it was to load Ajax in fnStateLoaded , like this: 我正在尝试许多解决方案,到目前为止,最好的办法是将ajax加载到fnStateLoaded中 ,如下所示:
"fnStateLoaded": function (oSettings, oData) {
// Ajax here
},
... but it is useless because I need Ajax to remain "ajax": {} not $.ajax( {}); ...但这没用,因为我需要Ajax保持“ ajax”:{}而不是$ .ajax({}); . 。
That being said, any advice on how to get oData and use it? 话虽如此,关于如何获取和使用oData的任何建议?
PS: I tried to get data right from the inputs, but at that time fnStateLoadParams did not manage to pass the data to the Inputs, so $("input[name=user_name]").val(); PS:我试图从输入中正确获取数据,但当时fnStateLoadParams未能将数据传递到输入,因此$(“ input [name = user_name]”)。val(); returns undefined as well. 也返回undefined 。
Thank you all in advance. 谢谢大家。
David 大卫
You can either assign oData
to a global variable or use state.loaded()
API method to retrieve last loaded state in Ajax call. 您可以将oData
分配给全局变量,也可以使用state.loaded()
API方法检索Ajax调用中的最后一个加载状态。
For example: 例如:
"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() }}'
}
}
I found a clean and easy solution for this problem. 我找到了解决此问题的简便方法。
grid.getDataTable().ajax.params();
After I obtained the oData I pass it to the Ajax like this: 获得oData之后,将其传递给Ajax,如下所示:
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
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.