所以,我正在为用户请求的任何表创建一个通用页面。为此,我正在尝试从服务器获取所有数据,而没有在客户端上进行任何硬编码。
$(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(一个未经测试的)代码示例,如果这没有意义: