0

因此,我正在尝试制作一个简单的自动完成表单,但在尝试测试程序时不断出现错误。当我尝试测试程序时,我的控制台吐出 [11:25:26.267] SyntaxError: JSON.parse: unexpected character @ /search.php:22 这是这一行。我很确定我的语法很好,但我可能弄错了。任何和所有的帮助将不胜感激。感谢任何花时间阅读和/或回答的人,即使您无能为力!

for (var i = 0; i < response.length; i++)

我的完整代码如下。

编辑:现在页面与 json 相呼应。当我执行 console.log(req.responsetext) 时,我得到 [11:38:04.967] ReferenceError: req is not defined。但是我将 req 定义为窗口加载时的新 xml 请求,所以我有点难过。

    <!DOCTYPE html>
<html lang='en'>
<head>
    <meta charset='utf-8'>
    <title>Auto Complete</title>
</head>

<body>
    <script>
        window.onload = function () {
            var req = new XMLHttpRequest();     //the HTTP request which will invoke the query
            var input = document.getElementById('search');      //where to grab the search from
            var output = document.getElementById('results');    //where to display the sugestions

            input.oninput = getSuggestions;

            function getSuggestions() {
                req.onreadystatechange = function () {
                    output.innerHTML = "";  //CLEAR the previous results!! only once the server can process new ones though
                    if (this.readyState == 4 && input.value != "") {
                        var response = JSON.parse('(' + req.responseText + ')');
                        for (var i = 0; i < response.length; i++)
                            addSuggestion(response[i].terms);
                    }
                }               
                req.open('GET', 'getterms.php?query=' + input.value, true); //GET request to getterms.php?=
                req.send(null);
            }

            addSuggestion = function (suggestion) {
                var div = document.createElement('div');
                var p = document.createElement('p');
                div.classList.add('suggestion');        //suggestion[x]...
                p.textContent = suggestion;             
                div.appendChild(p);
                output.appendChild(div);

                div.onclick = function() {
                    input.value = p.innerHTML;  //set the search box
                    getSuggestions();           //GET new suggesions
                }


            }
        }
    </script>

    <input type='text' id='search' name='search' autofocus='autofocus'>
    <div id='results'></div>
</body>
</html>

编辑这是我的 php 页面,它与 json 相呼应。

<?php
error_reporting(E_ALL);
ini_set('display_errors', 'On');

if (!isset($_GET['query']) || empty($_GET['query']))
    header('HTTP/1.0 400 Bad Request', true, 400);
else {


    $db = new PDO(
    my database
    );


    $search_query = $db->prepare("
        SELECT * FROM `words` WHERE `word` LIKE :keywords LIMIT 5
    ");

    $params = array(
        ':keywords' => $_GET['query'] . '%',
    );

    $search_query->execute($params);
    $results = $search_query->fetchAll(PDO::FETCH_ASSOC);

    echo json_encode($results);
}
?>
4

1 回答 1

1

去掉 JSON.parse 中的 ( 和 )!

JSON.parse('(' + req.responseText + ')')

应该

JSON.parse( req.responseText );

希望 responseText 是有效的 JSON

于 2013-05-07T18:35:16.333 回答