所以,我正在为用户请求的任何表创建一个通用页面。为此,我正在尝试从服务器获取所有数据,而没有在客户端上进行任何硬编码。
$(document).ready(function(){
/* Add/remove class to a row when clicked on */
$('#table1 tr').on('click',function() {
$(this).toggleClass('row_selected');
} );
var which_table=window.location.pathname;
var which_table_data=which_table.substring(0,which_table.length-1)+'/data';
var table_name=which_table.substring(14,which_table.length-1);
$('#table1').dataTable({
"bProcessing": true,"bServerSide": true,"bjQueryUI": true,"sAjaxSource": which_table_data,"bPaginate": true,"sPaginationType": "full_numbers","sScrollX":"100%","aoColumnDefs": [{
"targets" : [0],"visible" : false,"searchable" : false
}]
}).makeEditable({
"sUpdateURL": "../update/" + table_name,"sAddURL": "../add/" + table_name,"sDeleteURL": "../delete/" + table_name,"aoColumns": $.ajax({
dataType: "json",url: '/get_aoColumns',data: function (table_name) {
return {
q: table_name
};
},results: function (data) {
alert(data);
}
});
});
});
所以在这件作品中基于var where_table = window.location.pathname;我尝试从我成功的服务器获取相应表的数据。但是现在我想从服务器获取aoColumns数组。我的问题是我可以在同一请求中发送数据以及aoData,secho和其他必填字段。我认为,由于aoColumns不是所需的json的一部分,因此可能无法正确地呈现数据。如何获取任何表的aoColumns,以便即使验证成为服务器端,我也不必为每个表设计一个页面。
这下面的部分没有工作,因为我不知道什么是正确的做法
"aoColumns": $.ajax({
dataType: "json",
EDITED: –
我试过@ garryp的方法..
这是从服务器获得的数据
[{"cssclass": "required","type": "textarea"},{"sUpdateURL": "../update/my_table","cssclass": "required","type": "textarea","loadtype": "POST","submit": "OK"},{"loadurl": "../data/","sUpdateURL": "../update/my_table","type": "select","submit": "OK"}]
这是我的代码:
$(document).ready(function(){
/* Add/remove class to a row when clicked on */
$('#table1 tr').on('click',function() {
$(this).toggleClass('row_selected');
} );
var which_table=window.location.pathname;
var which_table_data=which_table.substring(0,which_table.length-1);
if(table_name.indexOf('Welog')> -1) {
$('#table1').dataTable({
"bProcessing": true,"sScrollX": "100%"
});
$('#formAddNewRow').hide();
}
else {
$.ajax({
url: '../get_aodata/' + table_name,async: false,success: function (data) {
alert(data);
$('#table1').dataTable({
"bProcessing": true,"sScrollX": "100%","aoColumnDefs": [{
"targets": [0],"visible": false,"searchable": false
}]
}).makeEditable({
"sUpdateURL": "../update/" + table_name,"sAddDeletetoolbarSelector": "#table1_length","aoColumns" : data
/*"aoColumns" : [
{
"cssclass": "required","type":"textarea"
},{
"cssclass": "required","type":"textarea","submit" : "OK","sUpdateURL": "../update/"+table_name,"loadtype" : "POST"
},{
"loadurl" : "../data/","type" : "select","submit": "OK","loadtype" : "POST"
}
]*/
});
}
});
}
});
所以如果你看到这个代码中注释掉的aoColumns与从服务器得到的输出完全相同,但是从服务器得到的结果不起作用,如果取消注释的话,那个注释掉了。如果使用aoColumns,则从服务器得到的数据:数据的行为方式与在可伪造函数中完全没有提到aoColumns参数的方式相同。这是否意味着数据没有达到该参数coz我不会在控制台中得到任何错误。
解决方案: –
success : function(data){
var data_str= JSON.parse(data);
});
好。我不得不使用解析将json字符串转换为JSobject,然后它终止工作。
解决方法
它不起作用,因为您将这个返回值$ .ajax(…)分配给aoColumns(当您实际需要将列数组分配给“aoColumns”)时:
}).makeEditable({
...
"aoColumns": $.ajax({
相反,您需要做的是使AJAX调用FirsT。然后,在jQuery成功函数内部设置你的datatable。
$.ajax({
url: '/get_aoColumns',...
success : function(data) {
// Todo: put all your datatable code in here.
// and assign `data` to "aoColumns"
/** data table code **/
}).makeEditable({
"aoColumns": data
/** rest of data table code **/
}
我已经尝试离开所有重要的位,使关键点清楚,但这应该可以帮助您了解错误的地方。
我在这里设置了一个JS fiddle(一个未经测试的)代码示例,如果这没有意义:
http://jsfiddle.net/GarryPas/got4fxhb/1/