我已经使用json_encode函数从php脚本中发送了数据。
如果我下面的console.log(resp)
是我得到的O / P。
data: "{"dept_name":"IT","city_name":"Mumbai","emp_id":"#AC001","emp_name":"Akshay S. Shrivastav"}
{"dept_name":"IT","city_name":"Mumbai","emp_id":"#AC003","emp_name":"Aakash Shrivastav"}" status: "success"
但是,如果我console.log(resp.data)
得到了以下数据
{"dept_name":"IT","city_name":"Mumbai","emp_id":"#AC001","emp_name":"Akshay S. Shrivastav"}{"dept_name":"IT","city_name":"Mumbai","emp_id":"#AC003","emp_name":"Aakash Shrivastav"}
现在,我正尝试在使用以下代码的数据表中显示此数据。
$('#grpList').DataTable().row.add([
resp.data.dept_name,
resp.data.city_name,
resp.data.emp_id,
resp.data.emp_name
]).draw(false);
我收到以下错误
DataTables warning: table id=grpList - Requested unknown parameter '0' for row 0, column 0. For more information about this error, please see http://datatables.net/tn/4
我单手只显示console.log(resp.data.dept_name)
时会显示undefined
如果数据增加,我将有多个JSON响应,目前,我只有两个。我无法弄清楚如何使用循环显示多个数据并将其附加到数据表中。
我正在使用下面的php代码生成JSON
$jsonArray = "";
if($data->num_rows > 0)
{
while($row = $data->fetch_assoc())
{
$jsonArray .= json_encode(
array(
"dept_name" => $row['department_name'],
"city_name" => $row['city_name'],
"emp_id" => $row['emp_id'],
"emp_name" => $row['name']
));
}
echo json_encode(array("data" => $jsonArray, "status" => 'success'));
}
答案 0 :(得分:2)
因为resp.data
是对象的数组。您需要首先获取索引-假设索引0
或数组中的第一个对象:
$("#grpList").DataTable().row.add([
resp.data[0].dept_name,
resp.data[0].city_name,
resp.data[0].emp_id,
resp.data[0].emp_name
]).draw(false);
如果要第二个对象:
$("#grpList").DataTable().row.add([
resp.data[1].dept_name,
resp.data[1].city_name,
resp.data[1].emp_id,
resp.data[1].emp_name
]).draw(false);
当然,row.add()
也接受数组参数-这样也可以工作:
$("#grpList").DataTable().row.add(resp.data).draw(false);
答案 1 :(得分:1)
问题出在服务器端。
您将$jsonArray
定义为字符串!错了。
尝试以下方法:
$jsonArray = []; // An ARRAY here!
if($data->num_rows > 0)
{
while($row = $data->fetch_assoc())
{
array_push($jsonArray, json_encode( // Use array_push here
array(
"dept_name" => $row['department_name'],
"city_name" => $row['city_name'],
"emp_id" => $row['emp_id'],
"emp_name" => $row['name']
));
}
echo json_encode(array("data" => $jsonArray, "status" => 'success'));
}
编辑
如果上述方法有效,我不会...因为我没有对其进行测试。
但是,这就是我写它的方式(我想您会有更多机会):
$jsonArray = [];
if($data->num_rows > 0) {
while($row = $data->fetch_assoc()) {
// A temp array to rename the one of the keys...
$tempArray = [];
$tempArray = ["dept_name"] = $row['department_name'];
$tempArray = ["city_name"] = $row['city_name'];
$tempArray = ["emp_id"] = $row['emp_id'];
$tempArray = ["emp_name"] = $row['name'];
// Push to the jsonArray now...
array_push($jsonArray,$tempArray);
}
// And finally the result array... To be json encoded
$result = [];
$result = ["status"] = "success";
$result = ["data"] = jsonArray;
echo json_encode($result);
}
请注意,如果不重命名一个键,并且如果数据库中每行只有4个数据,则可以直接完成array_push($jsonArray,$row);
,而无需使用$tempArray
。
因此,请尝试... AND ,然后应用杰克的答案。 ;)