【问题标题】:Decoding JSON Data from PHP Page Using Jquery使用 Jquery 从 PHP 页面解码 JSON 数据
【发布时间】:2016-03-31 12:38:29
【问题描述】:

我想从数据库中获取数据并将其保存在一个数组中。 像这样

 var locations = [ ['Current', 18.53515053, 73.87944794, 2],

  ['VimanNagar', 18.5670762, 73.9084194, 1]
];

首先我创建了一个php页面

<?php
$servername = "localhost";
$username = "root";
$password = "";
$dbname = "citytrans";

// Create connection
$conn = new mysqli($servername, $username, $password, $dbname);
// Check connection
if ($conn->connect_error) {
    die("Connection failed: " . $conn->connect_error);
} 

$sql = "SELECT * FROM driver_location";
$result = $conn->query($sql);

if ($result->num_rows > 0) {
    // output data of each row
    while($row = $result->fetch_assoc()) {
       echo json_encode($row);
    }
} else {
    echo "0 results";
}
$conn->close();
?>

这给了我下面的结果

{"driver_id":"1","driver_lat":"18.53515053","driver_lng":"73.87944794","driver_code":"122"}{"driver_id":"2","driver_lat":"18.53640175","driver_lng":"73.88206482","driver_code":"133"}

现在我想使用 Jquery 将其转换为数组(我想对其进行解码),我只想从上面显示的数据库中提取的我的 jSON 数据中的 drivers_latdrivers_lng 值。

我正在使用下面的代码来解析数据表单 json

jQuery.ajax({                              
    url: baseurl +  "getdriverlocation.php",
    type: "JSON",
    async: false,
    success: function(data){
           var myArray = JSON.parse(data);
                console.log(myArray.driver_lat)
    } 
});

但它给了我错误(如下所示)

SyntaxError: JSON.parse: 意外的非空白字符后 JSON数据第1行第92列的JSON数据

我只想要json数据中的两个值并将其保存在数组变量中

请帮忙

【问题讨论】:

  • 问题是,您将多个 json-objects 连接到 one 字符串,这会导致 json 无效。 (在你的while循环中)
  • 回显 json_encode($row);处于while循环中。所以返回的字符串不正确
  • 没有JSON这样的类型,我想你错过了dataType
  • 解决方案是首先将所有结果存储在 one 数组中,然后 json_encode 该数组并回显。
  • 使用数组..推入数组...并在您的 php 脚本末尾回显...

标签: javascript php jquery arrays json


【解决方案1】:

使用这个..

jQuery.ajax({                              
url: baseurl +  "getdriverlocation.php",
type: "JSON",
async: false,
success: function(data){
       var myArray = jQuery.parseJSON(data);// instead of JSON.parse(data)
       jQuery(myArray).each(function( index, element ) {     
         console.log(element.driver_lat)
       });
} 
});

【讨论】:

  • 请提供getdriverlocation.php页面的完整输出
  • [{"driver_id":"2","driver_lat":"18.53640175","driver_lng":"73.88206482","driver_code":"133"}]
  • 早些时候我得到这个输出 {"driver_id":"1","driver_lat":"18.53515053","driver_lng":"73.87944794","driver_code":"122"}, {" driver_id":"2","driver_lat":"18.53640175","driver_lng":"73.88206482","driver_code":"133"} 但使用您的代码后我得到 [{"driver_id":"2"," driver_lat":"18.53640175","driver_lng":"73.88206482","driver_‌​code":"133"}] 只有一个
  • 问题中给出
  • 有效!谢谢
【解决方案2】:

在你的 php 中你应该这样做:

if ($result->num_rows > 0) {
    // output data of each row <- no, build your data, then make only 1 output
    $output = array();
    while($row = $result->fetch_assoc()) {
       $output[] = $row;
    }
    echo json_encode($output);
}

然后在你的 jQuery 中,解析整个 json-decoded 数组...

【讨论】:

  • PHP 发送给 jQuery 的结果 json 对象是什么?
  • [{"driver_id":"2","driver_lat":"18.53640175","driver_lng":"73.88206482","driver_code":"133"}]
【解决方案3】:

您的 json 数据无效。 您必须在两个 JSON 对象之间放置逗号 你的回应必须是 {"driver_id":"1","driver_lat":"18.53515053","driver_lng":"73.87944794","driver_code":"122"}, {"driver_id":"2","driver_lat":"18.53640175","driver_lng":"73.88206482","driver_code":"133"}

【讨论】:

  • 这也是无效的
【解决方案4】:

当我确定您的响应 JSON 格式无效时,响应 JSON 格式应该像这样以便通过 JSON.parse() 解析成 JSON

    [{"driver_id":"1","driver_lat":"18.53515053","driver_lng":"73.87944794","driver_code":"122"},
{"driver_id":"2","driver_lat":"18.53640175","driver_lng":"73.88206482","driver_code":"133"}]

【讨论】:

    【解决方案5】:

    试试这个

    $arrTmp = array();
    if ($result->num_rows > 0) {
       // output data of each row
       while($row = $result->fetch_assoc()) {
          $arrTmp[] = $row;
       }
    }
    echo json_encode($arrTmp);
    

    也许还有适用于旧浏览器的 jQuery 工具

    $.parseJSON(data);
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2023-03-31
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多