从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,因此在异步请求完成之前生成的页面还不是问题。
问题可能是我在远程服务器上但在本地文件上没有这样做吗?据我所知,浏览器应该能够处理这种情况。
答案 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工作,我不能幻想任何理由。它应该以同样的方式失败。