目前我正在开展一个网站项目,我遇到了一个非常奇怪的错误"使用jQuery自动完成和Ajax + PHP。
如果我在自己的计算机的Web服务器上运行脚本+ PHP,我会获得正确的格式化JSON值,并且自动完成工作。
当我将整个项目上传到远程服务器(如同一网络上的另一台计算机)时,我总是得到一个JSON ParseError。
这是我的剧本:
$("#datum_filter").autocomplete({
minLength: 2,
source: function(request, response){
$.ajax({
url: "autocomplete.php?filter=datum",
data:{
mode : "ajax",
limit : 15,
term : request.term
},
dataType: "json",
success: function(data){
try{
}
catch (e){
alert(e);
}
response(data);
},
error: function(jqXHR, textStatus, errorThrown){
console.log(errorThrown); console.log(textStatus);
}
})
},
select: function(e, ui){
var val = ui.item.value;
alert("Clicked item: " + val);
}
});
});
和PHP:
if($_REQUEST["filter"] == "datum"){
try{
$stmt = $DB->prepare('SELECT datum FROM data WHERE datum LIKE :term GROUP BY datum');
$stmt->execute(array('term' => '%'.$_GET['term'].'%'));
while($row = $stmt->fetch()) {
$data[] = $row['datum'];
}
}catch(PDOException $e){
echo 'ERROR: ' . $e->getMessage();
}
echo json_encode($data);
}
来自本地和远程服务器的响应:
本地PC&服务器
远程服务器
远程服务器错误:
SyntaxError:JSON.parse:JSON数据的第1行第2列的意外字符
[...]
parsererror
感谢您的帮助!
答案 0 :(得分:0)
远程服务器上的autocompletephp
不同。一个版本返回33个字符,其他30个字符。将该文件的本地版本(文件)上传到远程服务器。
答案 1 :(得分:0)
我不确定这可能是你可以尝试的安全实现
echo json_encode(array("Results" => $data));
这会强制发送到浏览器的JSON数据是一个Object而不是一个数组,但这只是一个理论,因为它应该工作,我可以建议的唯一的事情就是设置Content-type
标题为application/json
它可能是内容类型的冲突,然后由@Rick提供评论
答案 2 :(得分:0)
所以我设法让它发挥作用。我有一个文件" config.php" (它包含MYSQL PDO配置等,并将其包含在我的主php文件中。)。 我完全忘了它将编码改为UTF-8编码而没有BOM(我把它保存在简单的UTF-8中),这就是导致我的远程服务器出现问题的原因。
谢谢你们的提示,这些给了我一些有用的建议。