从 PHP 查询中获取 JSON 数组后,使用 javascript 将 JSON 数组写入 html 页面

Posted

技术标签:

【中文标题】从 PHP 查询中获取 JSON 数组后,使用 javascript 将 JSON 数组写入 html 页面【英文标题】:Writing JSON array to html page with javascript after getting it from PHP query 【发布时间】:2015-07-30 16:01:16 【问题描述】:

我有一个传递给 php 数组的 mysql 查询。使用json_encode 将 PHP 数组转换为 JSON 数组。我正在尝试将其打印到我的 html 页面上。这是我目前所拥有的。

<?php
class db 
  public $conn;

  function dbLogin() 
    $this->conn = new mysqli("1.2.3.4","user","pwd","db");  
  

  public function selectQuery() 
    $this->dbLogin();
    $query = "
        SELECT      *
        FROM        tekken_7_frame_data
    ";
    echo "<pre>";
    $resultArray = Array();
    if ($result = $this->conn->query($query)) 
        while ($row = $result->fetch_array()) 
            $resultArray[] = $row;
        

    

    echo "</pre>";
    $resultJson = json_encode($resultArray);
  


$fData = new db();
$fData->selectQuery();
?>

<html>
<head>
</head>
<body>
<script>
  var jsonArray = <?php echo $resultJson ?>;
  document.write(jsonArray);
  for (i = 0; i < jsonArray.length; i++) 
    document.write(jsonArray[i][1]);
  
</script>
</body>
</html>

我在 *** 上阅读了其他类似的问题,但没有运气;我的 html 页面是完全空白的。我尝试将json_econde(...) 放在javascript 变量jsonArray 中,而不是放在我的PHP 类中。那也没有用。我还 var_dump'd 没有问题的 PHP 数组(页面上显示的整个内容),以及使用 json_encode 将数组放在 PHP 变量中,然后毫无问题地回显该数组。

我不知道如何访问这个 JSON 数组。我最终希望它在一个表格中,但因为这是我第一次弥合 PHP 和 Javascript 之间的差距,所以我想我会一步一步来,这样我就可以确切地知道发生了什么。

【问题讨论】:

您是否尝试过直接回显 php 变量来隔离问题?即问题是PHP 还是JS?您查看过页面源吗?检查控制台,确保 JS 运行良好? 是的,我应该补充一下。我有var_dump'd PHP 数组没有问题。我已经使用json_encode 将 PHP 数组放入一个变量中,然后打印该变量也没有问题。两个数组都完整显示在页面上。当我显示两个数组时,控制台中也没有错误。 另外,代码有点奇怪。您应该返回一个值,或者在函数中回显。问题可能是出现在函数中的$resultJson 变量,然后也出现在JS 部分中。我建议您编辑您的函数以不回显&lt;pre&gt;,并返回数组。然后你会得到类似$result = $db-&gt;selectQuery();,然后是echo $result; 你在for 循环中有错字。它应该是i &lt; jsonArray.length,而不是i &gt; jsonArray.length。这导致循环立即结束而不打印任何内容。 哈哈 Barmar 可能已经发现了问题所在。此外,批评 DB 类:应该有类名的首字母大写,该字段应该是私有的,并且应该在构造函数中建立连接,而不是为您所做的每个查询建立连接 :) 我认为有一个 fetch_all 或类似的方法首先将结果作为数组返回! 【参考方案1】:

尝试将您的功能(不要使用echo!而是使用return)更改为:

public function selectQuery() 
    $this->dbLogin();
    $query = "
        SELECT      *
        FROM        tekken_7_frame_data
    ";
    $resultArray = Array();
    if ($result = $this->conn->query($query)) 
        while ($row = $result->fetch_array()) 
            $resultArray[] = $row;
        

    

   return json_encode($resultArray);
  

在下面:

$fData = new db();
$resultJson = $fData->selectQuery();

【讨论】:

这个答案非常可靠。这正是我所需要的。这通常是如何通过 JSON 将 PHP 数组传递给 Javascript 的吗? 有很多方法可以做同样的事情,我只是根据我在你的帖子中看到的逻辑修复了你的代码:-)【参考方案2】:

将数据从 PHP 获取到 JavaScript 的最佳方式是使用异步请求(即“AJAX”)。

JavaScript 库大大简化了这个过程。这是一个使用 AngularJS (http://angularjs.org) 的粗略示例。

json.php

// this file JUST needs to print JSON as string.
<?php
class db 
  public $conn;

  function dbLogin() 
    $this->conn = new mysqli("1.2.3.4","user","pwd","db");  
  

  public function selectQuery() 
    $this->dbLogin();
    $query = "
        SELECT      *
        FROM        tekken_7_frame_data
    ";
    $resultArray = Array();
    if ($result = $this->conn->query($query)) 
        while ($row = $result->fetch_array()) 
            $resultArray[] = $row;
        

        
    return json_encode($resultArray);
  


$fData = new db();
print $fData->selectQuery();
?>

myscript.js

// this will fetch your JSON string from the PHP file and 
// set $scope.myData to a JS object.
// it sets $scope.myDataString to a JSON stringified format.

angular.module('myApp' [])
  .controller('myController', function($http, $scope) 
    var $scope.myData = ;
    var $scope.myDataString = '';
    function getMyData () 
      $http.get('/json.php')
      .success( function (data) 
        $scope.myData = data;
        $scope.myDataString = JSON.stringify(data);
      )
      .error(function (err) 
         $scope.myData = error: err;
         $scope.myDataString = "ERROR: "+JSON.stringify(data);
      )
    
    getMyData();
  

mypage.html

<!-- include angular and your app's file. 
     make sure to link in your app and controller -->
<html>
<head>
    <script src="https://ajax.googleapis.com/ajax/libs/angularjs/1.3.14/angular.min.js"></script>
    <script src='myscript.js'>
</head>
<body ng-app='myApp'>
  <main ng-controller='myController as myCtrl'>
    <div id='myOutput'>myDataString</div>
  </main>
</body>
</html>

【讨论】:

这是一个很棒的答案。感谢您花时间写这篇文章。一旦我对处理 JSON 数组感到更舒服一点,我将在一周左右的时间里回到这个问题上。无论如何,我的下一个任务是应用一些 AJAX,所以我一定会使用这个答案。在应用 Angular 方面我还有一点距离,但如果学习曲线不是太糟糕,那么我也会应用你的帖子。

以上是关于从 PHP 查询中获取 JSON 数组后,使用 javascript 将 JSON 数组写入 html 页面的主要内容,如果未能解决你的问题,请参考以下文章

PHP-AJAX:如何通过 php/json 数组从查询中填充 jquery 数据表

以随机顺序从 JSON 数组中获取元素

使用以下格式从 PHP 中的 JSON 数组获取值?

PHP - 从查询结果中获取对象数组

java中把json怎么转换成数组

java中把json怎么转换成数组?