数据表 AJAX - 传递一个数组
Datatables AJAX - passing an array
(根据我在此期间得到的帮助更新了消息)
我正在尝试通过 Ajax(th 和 td)动态填充我的 jQuery 数据表。
为此,我虔诚地遵循我在这里找到的一个 jsfiddle 脚本,它似乎有效。
不同之处在于,编写此脚本的人只是在使用它之前硬编码了他的 "dataSet" 变量,而我需要从 php 自动生成它,然后在 jQuery 中解析它].
当我尝试这样做时,我得到的是:
TypeError: e is not an Object. (evaluating '"length"in e').
伊斯兰教在此期间通过聊天帮了我很多,看来格式和 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。我没有使用其他库。
当我 "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
});
*/
如果我取消注释对 dataTable 的调用,我会在另一条错误消息之上收到另一条错误消息:
TypeError: e is not an Object. (evaluating '"length"in e')
TypeError: undefined is not an object (evaluating 'e[i].aDataSort')
如有任何帮助,我们将不胜感激。
更新:我通过更改从 "response" 到 "dataSet" 的传递方式摆脱了第一条错误消息,如下所示:
success: function(response){
dataSet = JSON.parse(response);
//instead of "dataSet=response;"
$.each(dataSet[0], function(key, value) {
...
});
}
所以现在,我在尝试将 dataSet 传递给 dataTable 时只有第二条错误消息。
这似乎只是一个范围问题,因为 console.log(dataSet) 在 ajax 调用之外,如下所示不会输出任何内容
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
});
更新:问题已解决,请参阅下面我的其他 post。谢谢大家!
你使用$.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
);
}
...
这里
您不需要创建一个字符串,而是一个具有正确格式的数组:
$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;
}
<?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 对象
问题已解决!
好的,在 islam 的宝贵帮助和 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);
?>
这按应有的方式格式化了数据集数组。
然后,在 jQuery ajax 调用中从 response 传递到 dataSet 的数据必须正确:
success: function(response){
dataSet = JSON.parse(response);
//instead of "dataSet=response;"
$.each(dataSet[0], function(key, value) {
...
});
}
现在第一个错误消息消失了。
然后我不得不在 Ajax 调用之外访问数据集和 my_columns 数组:
var my_columns = [];
var dataSet =[];
$.ajax({
...
async: false,
...
success: function(response){
...
}
});
现在,它起作用了。
原始问题中的两个工作 jsfiddle 并没有帮助,因为它们不包含要转换的数组,这就是问题所在。值得庆幸的是,我最终到达了那里。
感谢大家的指导。非常感谢!
在您的 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"
}
]
});
(根据我在此期间得到的帮助更新了消息)
我正在尝试通过 Ajax(th 和 td)动态填充我的 jQuery 数据表。
为此,我虔诚地遵循我在这里找到的一个 jsfiddle 脚本,它似乎有效。
不同之处在于,编写此脚本的人只是在使用它之前硬编码了他的 "dataSet" 变量,而我需要从 php 自动生成它,然后在 jQuery 中解析它].
当我尝试这样做时,我得到的是:
TypeError: e is not an Object. (evaluating '"length"in e').
伊斯兰教在此期间通过聊天帮了我很多,看来格式和 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。我没有使用其他库。
当我 "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
});
*/
如果我取消注释对 dataTable 的调用,我会在另一条错误消息之上收到另一条错误消息:
TypeError: e is not an Object. (evaluating '"length"in e')
TypeError: undefined is not an object (evaluating 'e[i].aDataSort')
如有任何帮助,我们将不胜感激。
更新:我通过更改从 "response" 到 "dataSet" 的传递方式摆脱了第一条错误消息,如下所示:
success: function(response){
dataSet = JSON.parse(response);
//instead of "dataSet=response;"
$.each(dataSet[0], function(key, value) {
...
});
}
所以现在,我在尝试将 dataSet 传递给 dataTable 时只有第二条错误消息。
这似乎只是一个范围问题,因为 console.log(dataSet) 在 ajax 调用之外,如下所示不会输出任何内容
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
});
更新:问题已解决,请参阅下面我的其他 post。谢谢大家!
你使用$.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
);
}
... 这里
您不需要创建一个字符串,而是一个具有正确格式的数组:
$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;
}
<?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 对象
问题已解决!
好的,在 islam 的宝贵帮助和 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);
?>
这按应有的方式格式化了数据集数组。
然后,在 jQuery ajax 调用中从 response 传递到 dataSet 的数据必须正确:
success: function(response){
dataSet = JSON.parse(response);
//instead of "dataSet=response;"
$.each(dataSet[0], function(key, value) {
...
});
}
现在第一个错误消息消失了。
然后我不得不在 Ajax 调用之外访问数据集和 my_columns 数组:
var my_columns = [];
var dataSet =[];
$.ajax({
...
async: false,
...
success: function(response){
...
}
});
现在,它起作用了。 原始问题中的两个工作 jsfiddle 并没有帮助,因为它们不包含要转换的数组,这就是问题所在。值得庆幸的是,我最终到达了那里。
感谢大家的指导。非常感谢!
在您的 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"
}
]
});