jquery – 有没有办法从datatable可编辑的服务器获取aocolumn?

所以,我正在为用户请求的任何表创建一个通用页面。为此,我正在尝试从服务器获取所有数据,而没有在客户端上进行任何硬编码。
$(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/

相关文章

jQuery插件的种类 1、封装对象方法 这种插件是将对象方法封装起来,用于对通过选择器获取的jQuery对象进...
扩展jQuery插件和方法的作用是非常强大的,它可以节省大量开发时间。 入门 编写一个jQuery插件开始于给...
最近项目中需要实现3D图片层叠旋转木马切换的效果,于是用到了jquery.roundabout.js。 兼容性如图: ht...
一、什么是deferred对象? 开发网站的过程中,我们经常遇到某些耗时很长的javascript操作。其中,既有异...
AMD 模块 AMD(异步模块定义,Asynchronous Module Definition)格式总体的目标是为现在的开发者提供一...