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


Requesting a PHP script via AJAX. The AJAX request returns actual PHP script

从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,所以在异步请求完成之前生成页面还不是问题。

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

发送标头后,将从数据库中回显连接状态。

删除以下行:

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

并将标题放在JSON输出之上:

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

我确信您的PHP根本没有编译。这是因为返回的结果实际上是php文件的body,表明没有进行翻译。

您可以通过创建一个代码为的文件来检查您的PHP实例是否正在运行

<?php phpinfo() ?>

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

至于为什么你的网络工具工作,我无法想象任何原因。它也应该以同样的方式失败。