从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安装,直到输出正确为止。
至于为什么你的网络工具工作,我无法想象任何原因。它也应该以同样的方式失败。