簡體   English   中英

如何解析PHP Scipt接收到的JSON數據

[英]How to parse a JSON data that has been received by a PHP scipt

我已經使用json_encode函數從PHP腳本發送了數據。

如果我下面的console.log(resp)是O / PI get。

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

因為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);

問題出在服務器端。

您將$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

所以,試試這個... 然后申請傑克的答案。 ;)

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM