通过AJAX请求PHP脚本。 AJAX请求返回实际的PHP脚本

时间:2015-02-23 05:21:14

标签: php ajax json

从php脚本请求JSON:

var channelList;

$(document).ready(function() {
    $.ajax({    
        url: 'channellookup.php',    
        dataType: 'json',    
        error: function(){console.log(arguments)},     
        success: function(data) {
            console.log(data.success);
            channelList = data;
        }  
    });
});

现在到了有趣的部分:控制台中的错误消息如下所示:

Arguments { 0: XMLHttpRequest, 1: "parsererror", 2: "Invalid JSON: <?php
   header('Content-type: application/json');     // To ensure output json type.
   class MyDB extends SQLite3
   {

等等。 我的整个PHP代码都在该消息中。这里必须完全错误。

这是我的PHP完整

<?php

   header('Content-type: application/json');     // To ensure output json type.
   class MyDB extends SQLite3

   {
      function __construct()

      {
         $this->open('database_sqlite3.db');    
      }
   }

   $db = new MyDB();

   if(!$db){    
      echo $db->lastErrorMsg();    
   } else {    
      echo "Opened database successfully\n";    
   }

   $sql =<<<EOF

      SELECT * from channels;

EOF;

   $ret = $db->query($sql);

   $channelList = array();

   while($row = $ret->fetchArray(SQLITE3_ASSOC) ){    
      $channelList[] = $row;    
   }
   echo json_encode($channelList);
   $db->close();
?>

你可以看到我编码为json。正如我所说,这在终端工作。 请记住,我不想在我的html中使用json,因此在异步请求完成之前生成的页面还不是问题。

问题可能是我在远程服务器上但在本地文件上没有这样做吗?据我所知,浏览器应该能够处理这种情况。

2 个答案:

答案 0 :(得分:4)

发送标题后,您将回显db的连接状态。

删除这一行:

    if(!$db){    
      echo $db->lastErrorMsg();    
   } else {    
      echo "Opened database successfully\n";    
   }

将标题放在JSON输出上方:

header('Content-type: application/json');   
echo json_encode($channelList);
$db->close();

答案 1 :(得分:1)

我很确定你的PHP根本没有编译。这是因为返回的结果实际上是php文件的body,表示没有发生翻译。

您可以通过创建包含以下代码的文件来检查您的PHP实例是否正在运行:

<?php phpinfo() ?>

使用您的浏览器导航到该页面,看看是否有任何输出。您想检查PHP / Apache安装,直到输出正确。

至于为什么你的webtool工作,我不能幻想任何理由。它应该以同样的方式失败。