首页 > 解决方案 > 如何解析 PHP scipt 接收到的 JSON 数据

问题描述

我已经使用 `json_encode' 函数从我的 php 脚本发送了数据。

如果我console.log(resp)在下面是 O/PI 获取。

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'));
    }

标签: javascriptjqueryarraysjsonobject

解决方案


因为resp.data是一个对象数组。您需要先获取索引 - 比如说 index 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);

推荐阅读