数据表AJAX-传递数组

时间:2019-02-15 09:08:21

标签: php jquery ajax datatables string-parsing

(消息是根据我同时获得的帮助更新的)

我正在尝试通过Ajax(包括td和td)动态填充jQuery dataTable。

为此,我虔诚地遵循在这里发现的jsfiddle脚本,该脚本似乎行得通。

不同之处在于,编写此脚本的人只是在使用它之前就对其“ dataSet”变量进行了硬编码,而我需要从php自动生成它,然后在jQuery中对其进行解析。

当我尝试这样做时,我得到的只是:

TypeError: e is not an Object. (evaluating '"length"in e').

在此期间,伊斯兰通过聊天为我提供了很多帮助,看来现在formatting和console.log(dataSet)都可以了。

这是我(更新的)尝试:

HTML:

<table id="example"></table> 

PHP:

<?php
    $dataset=array();
    ....
    while($row = mysqli_fetch_assoc($sql)) {
        .....
        $array_tmp = array();
        $array_tmp["Header1"] = $alias;
        $array_tmp["Header2"] = $chambres;
        $array_tmp["Header3"] = $adresse;
        $dataset[] = $array_tmp;
    }
    ....
    echo json_encode($dataset, JSON_UNESCAPED_UNICODE);
?>

jQuery:

var my_columns = [];
var dataSet =[];

$.ajax({
    type: "GET",
    url:  "myfile.php",
    data: 'value=1',
    datatype:'json',
    cache: false,
    success: function(response){
        dataSet=response;
        $.each( dataSet[0], function( key, value ) {
            var my_item = {};
            my_item.data = key;
            my_item.title = key;
            my_columns.push(my_item);
        });
    }
});

islam jsFiddled带有我的一些生产数据的代码,它可以工作,但是我仍然收到错误消息。所以,这真的是一个谜。

我在这里向您展示的正是我所拥有的。因此,没有其他改变游戏的方式了。

与伊斯兰教jsFiddled中使用的jQuery和dataTables相同。当我成功使用dataTables时,两者都已设置并正常工作,除了这种尝试检索服务器数据的特定尝试。我没有其他图书馆。

当我站在一边“ console.log(dataSet)”时,这就是我得到的(这似乎很好):

[
    {
        "Header1" : "tyurtyu",
        "Header2" : "zertzert",
        "Header3" : 123
    },
    {
        "Header1" : "sdfsdfsd" ,
        "Header2" : "dsfgsdfg",
        "Header3" : 456
    }
]

仅供参考,这是我尚未使用的对dataTables的带注释的调用,因为我已经在Ajax调用中收到错误消息。至少,它将显示之后应该在哪里使用我的dataSet数组。

/*
var dataTable = $('#example').DataTable({
    'bInfo'  : false,
    'paging' : false,
    'scrollX': false,
    'processing':false,
    'sDom'   : 'ltipr',
    'data'   : dataSet,
    "columns": my_columns
});
*/

如果我取消对该数据表的调用的注释,则会在另一个之上得到另一个错误消息:

TypeError: e is not an Object. (evaluating '"length"in e')
TypeError: undefined is not an object (evaluating 'e[i].aDataSort')

任何帮助将不胜感激。

更新:通过将我从“响应”传递到“数据集”的方式,我摆脱了第一条错误消息,就像这样:

    success: function(response){

        dataSet = JSON.parse(response);
        //instead of "dataSet=response;"

        $.each(dataSet[0], function(key, value) {
            ...
        });
    }

所以现在,当我尝试将dataSet传递到dataTable时,我只有第二条错误消息。

这似乎只是一个范围问题,因为ajax调用之外的console.log(dataSet),就像下面的内容一样,不会输出任何东西

var my_columns = [];
var dataSet =[];

$.ajax({
    type: "GET",
    url:  "php/ajax/get_table_values.php",
    data: 'value1=1',
    datatype:'json',
    cache: false,
    success: function(response){
        dataSet = JSON.parse(response);
        //instead of "dataSet=response;"

        $.each(dataSet[0], function(key, value) {
            var my_item = {};
            my_item.data = key;
            my_item.title = key;
            my_columns.push(my_item);
        });
    }
});

console.log(dataSet);

var dataTable = $('#example').DataTable({
    'bInfo'  : false,
    'paging' : false,
    'scrollX': false,
    'processing':false,
    'sDom'   : 'ltipr',
    'data'   : dataSet,
    "columns": my_columns
});

更新:问题已解决,请参阅下面的其他文章。谢谢大家!

5 个答案:

答案 0 :(得分:1)

您无需创建字符串,而是创建具有正确格式的数组:

$dataset=array();
...
while($row = mysqli_fetch_assoc($sql)) {
    ....
    $array_tmp = array();
    $array_tmp["Header1"] = $string_val1;
    $array_tmp["Header2"] = $string_val1;
    $array_tmp["Header3"] = $numval3;

    $dataset[] = $array_tmp;
}

答案 1 :(得分:1)

<?php

 $dataset='';
 ...
while($row = mysqli_fetch_assoc($sql)) {
 ....
  $dataset[]=array(
     "Header1" : $string_val1,
     "Header2" : $string_val1,
     "Header3" : $string_val1
  );
}
...

echo json_encode($dataset);

使用$ dataset作为数组,仅回显json编码的数组即可在脚本中获取json对象

答案 2 :(得分:1)

问题解决了!

好吧,在伊斯兰的宝贵帮助和Shafeeque TP的指导下,我终于使它起作用。所有发布者都对我有很大帮助。谢谢大家。

首先,PHP必须正确:

<?php
    $dataset=array();
    ....
    while($row = mysqli_fetch_assoc($sql)) {
        .....
        $array_tmp = array();
        $array_tmp["Header1"] = $alias;
        $array_tmp["Header2"] = $chambres;
        $array_tmp["Header3"] = $adresse;
        $dataset[] = $array_tmp;
    }
    ....
    echo json_encode($dataset, JSON_UNESCAPED_UNICODE);
?>

这将格式化dataSet数组。

然后,必须正确处理jQuery ajax调用中从响应传递到dataSet的数据:

success: function(response){

    dataSet = JSON.parse(response);
    //instead of "dataSet=response;"

    $.each(dataSet[0], function(key, value) {
        ...
    });
}

现在,第一条错误消息消失了。

然后我必须在Ajax调用之外访问dataSet和my_columns数组:

var my_columns = [];
var dataSet =[];

$.ajax({
    ...
    async: false,
    ...
    success: function(response){
        ...
    }
}); 

现在,它可以工作了。 原始问题中的两个可工作的jsfiddle并没有帮助,因为它们不包含要转换的数组,这就是问题所在。幸运的是,我终于到了那里。

感谢大家的指导。非常感谢!

答案 3 :(得分:1)

在您的php文件上执行以下操作:

 if ($_POST["action"] == "SLC" && isset($_POST["categoryId"])) {
         $category= $_POST["categoryId"];
         //do your query here btw use PDO is better
         //fill your data here and then return it
         $result = $command->fetchAll(PDO::FETCH_ASSOC)
         $return["data"] = $result;
         echo json_encode($return,JSON_UNESCAPED_UNICODE);
    }

然后在您的JavaScript中这样称呼它:

var tableTypeOfClientInfo = $('#tableTypeOfClientInfo ').DataTable({
                       "destroy": true,
                       "responsive":{
                         "details": {
                         renderer: function ( api, rowIdx, columns ) {
                           var data = $.map( columns, function ( col, i ) {
                             return col.hidden ?
                               '<tr data-dt-row="'+col.rowIndex+'" data-dt-column="'+col.columnIndex+'">'+
                                 '<td>'+col.title+':'+'</td> '+
                                 '<td>'+col.data+'</td>'+
                               '</tr>' :
                               '';
                           } ).join('');

                           return data ?$('<table/>').append( data ) :false;
                         }
                       }
                     },
                       "autoWidth": false,
                             "ajax": {
                                 "url": 'some.php',
                                 "method": 'POST',
                                 data:{action:"SLC", categoryId:id}
                             },
                             "columns": [
                                 {"data": "identification_number"},
                                 {"data": "address"},
                                 {"data": "birthday"},
                                 {"data": "phone"},
                                 {"data": "mail"}
                             ],
                             "language":{"url": "//cdn.datatables.net/plug-ins/1.10.15/i18n/Spanish.json"},
                               "columnDefs": [
                                 {
                                   "className": "dt-center", "targets": "_all"
                                  }
                               ]
                         });

答案 4 :(得分:-1)

您使用$.each需要一个对象。尝试更改PHP文件$dataset = json_encode($dataset);

我认为$ dataset必须是一个数组

还有这个

 $dataset=json_encode($dataset, Json_force_object); 

尝试伊斯兰代码,我认为这是正确的代码,输入

<?php

 $dataset=array();
 ...
while($row = mysqli_fetch_assoc($sql)) {
 ....
  $dataset[]=array(
     "Header1" : $string_val1,
     "Header2" : $string_val1,
     "Header3" : $string_val1
  );
}

...  这里