如何使用AJAX和JSON从PHP文件中返回数据

时间:2015-06-23 19:22:32

标签: javascript php jquery ajax json

对于初学者来说,这个网站是在Debian机器上运行的。 我有一个 SQLite3数据库,其中包含最新的新闻文章。我正在尝试使用PHP来查询这些文章的数据库,并将其作为JSON传递给AJAX,以便它可以显示在我的网页上。现在没有显示任何内容,我也不知道错误在哪里。

以下是从数据库中获取信息的PHP代码:

<?php

class MyDB extends SQLite3
{
    function __construct()
    {
        $this->open('website.db');
    }
}

$db = new MyDB();
$result = $db->query('SELECT * FROM news');
echo json_encode($result);
?>

以下是AJAX所在的JavaScript:

<script type="text/javascript">

 function getNews()
 {
     console.log("firstStep");
      $(document).ready(function()
      {

        console.log("secondStep");
        $.getJSON("http://localhost/getNews.php",function(result){

            console.log("thirdStep");
            $('news').append(result); // display result

                 });
       });
  }

我认为错误发生在$.getJSON("http://localhost/getNews.php",function(result)附近,就像在控制台中一样, thirdStep永远不会被输出。

这是它应附加到的HTML:  <div id = "newsEntry"> <news> test </news> </div>

任何帮助将不胜感激。

2 个答案:

答案 0 :(得分:1)

默认情况下,Web服务器将内容提供为application/html。因此,当您只是echo一个JSON字符串时,它就像html页面上的文本一样对待。要真正从服务器返回JSON,您需要专门设置它。

echo

之前加入此行
header('Content-Type: application/json; charset=utf-8');

修改

在检查PHP代码时,您缺少一行。请注意,$db->query()会向您返回SQLite3Result。你需要打电话:

$array = $result->fetchArray(SQLITE3_ASSOC);  // get an associative array first
$json = json_encode($array);
header('Content-Type: application/json; charset=utf-8');
echo $json

答案 1 :(得分:1)

要了解发生了什么,您可能需要添加错误处理程序:

$(document).ready(function() {
  $.ajax({
    url: "http://localhost/getNews.php",
    dataType: "json",
    success: function(result) {
      console.log("thirdStep");
    },
    error: function(err) {
      alert(err);
    }
  });
})