Jquery Autocomplete适用于localhost,但在远程服务器上提供了parseerror

时间:2017-03-05 23:35:53

标签: javascript php jquery json ajax

目前我正在开展一个网站项目,我遇到了一个非常奇怪的错误"使用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&服务器
Local PC & Server 远程服务器
enter image description here

远程服务器错误:

  

SyntaxError:JSON.parse:JSON数据的第1行第2列的意外字符
  [...]
  parsererror

感谢您的帮助!

3 个答案:

答案 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中),这就是导致我的远程服务器出现问题的原因。

谢谢你们的提示,这些给了我一些有用的建议。