javascript - jQuery 自动完成功能根据我输入的单词从数据库中获取项目,但结果显示为列表的水平线

标签 javascript php jquery html ajax

jQuery 自动完成功能根据我输入的单词从数据库中获取项目,但结果仅显示为列表的水平线。附图显示了结果的样子。

Result

HTML:

<form class="navbar-seach pull-center">
    <div>
        <input type="text" placeholder="Search Productstyle="width:550px; height:40px;padding-left: 10px;margin-top: 20px;" id="searchBox" onkeyup="if (event.keyCode === 13) {searchResults(this.value); this.value = '';}">
    </div>
</form>

PHP:

include 'searchbox.php';

$switch_id = filter_input(INPUT_POST, 'switch_id', FILTER_SANITIZE_SPECIAL_CHARS);

if (isset($_POST['name_startsWith']))
    $searchWordResults = $_POST['name_startsWith'];
else
    $searchWordResults = null;

switch($switch_id){
    case 1:
        $userObj = new searchBox();
        echo $userObj->autoComplete($searchWordResults);
        break;
}

jQuery:

$("#searchBox").autocomplete({
    source: function(request, response) {
        $.ajax({
            type: "POST",  
            url: "class/searchbox_switch.php",
            dataType: "json",
            data: { name_startsWith: request.term, switch_id: 1 },
            success: function(data) {
                response($.map(data, function(item){
                    return {
                        label: item.label,
                        value: item.value
                    };
                }));
            },
            error: function(response) {
                console.log(response.responseText);
            }
        });
    },
    autoFocus: true,
    minLength: 1,
    select: function( event, ui ) {
        searchResults(ui.item.label);
    }
});

PHP (searchbox.php):

include '../dbConnect.php';

class searchBox {
    public function autoComplete($name_startsWith) {
        $letterSearch = $name_startsWith . "%";
        $connectObj = new db_connect();
        $dbh = $connectObj->connect();

        $stmt = $dbh->prepare("SELECT product_name FROM products WHERE product_name LIKE :start");
        $stnd = array();
        $stmt->bindParam(':start', $letterSearch, PDO::PARAM_STR);
        $stmt->execute();
        $stnd = $stmt->fetchAll(PDO::FETCH_ASSOC);
        $json = json_encode($stnd);
        return $json;
    }

}

最佳答案

好的,明白了。您在结果中传递了错误的 key 。您的结果数据键是“product_name”并且您正在尝试访问“label”。尝试这个解决方案:

 success: function( data ) {                
          response( $.map( data, function(item) {                    
             return {
                   label: item.product_name,
             }
          }));                    

 },

关于javascript - jQuery 自动完成功能根据我输入的单词从数据库中获取项目,但结果显示为列表的水平线,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/41917493/

相关文章:

javascript - 如何通过按 React-Native 中的一个抽屉项目从抽屉导航移至上一个屏幕?

javascript - 单个服务器中的多个 ssl 域

javascript - 没有协议(protocol)编写的 URL 的规则是什么?

php - 使用 PHP 将 <tag></tag> 之间的所有内容转换为 HTML 实体

javascript - 滚动到 jquery 数组中的下一个元素

c# - 在 javascript 中添加“确定”和“取消”按钮

javascript - 如果您不使用特征检测,是否真的需要 Modernizr?

php - 在 php 中编辑字符串

php - 在 symfony 2 中实现用户事件

javascript - JS 验证以正常速度失败,但在单步执行代码时有效