首页 > 解决方案 > Jquery Array - AJAX PHP 自动完成输入

问题描述

我正在尝试使用 AJAX / PHP 创建一个自动完成输入,但从 PHP 返回的数组似乎正在破坏它。

这个想法是让风味名称和风味公司名称显示在用户可以选择的下拉/扩展 div 中。

返回到 AJAX 成功(数据)的数组:

[图片]

数组为 JSON:

在此处输入图像描述

我想获取flavour_name值和flavour_company_name要作为字符串放入框中的值,然后在选择时将它们都作为由 - flavour_name/组成的数组抓取,以便稍后flavour_company_name放入。DB

我试过使用JSON.stringify,创建一个var obj我让它返回 1 个值,但不是我想要的列表。

感谢所有帮助,在此先感谢。

我的 AJAX

$("#flavour-name-input").keyup(function(){

    var token = '<?php echo json_encode($token); ?>';
    var search = $(this).val();

    $.ajax({
    type: "POST",
    url: "controllers/recipeControl.php",
    data: { token: token, search: search },
    beforeSend: function(){
        $("#search-box").css("background","#FFF no-repeat 165px");
    },
    success: function(data){

        //var obj = JSON.parse(data);

        $("#suggesstion-box").show();

        $("#suggesstion-box").html(data);
        //$("#suggesstion-box").html(obj['flavour_name']);
        $("#search-box").css("background","#FFF");
    }
    });
});

我的 PHP 控制器

if(isset($_POST['search'])) {
    if($_SERVER['HTTP_X_REQUESTED_WITH'] == 'XMLHttpRequest' && isset($_POST['token']) 
        && json_decode($_POST['token']) === $_SESSION['token']){
            $search = $_POST['search'];
            echo json_encode($flavours->getAllFlavoursSearch($search));
        }

}

我的 PHP 函数

/**
    GET ALL FLAVOURS FOR SEARCH
*/
public function getAllFlavoursSearch($search) {
    $query = 'SELECT flavour_name, flavour_company_name FROM flavours WHERE flavour_name LIKE :search ORDER BY flavour_name ASC LIMIT 0,100';
    $stmt = $this->queryIt($query);
    $stmt = $this->bind(':search', '%'.$search.'%', PDO::PARAM_STR);
return $this->resultset();
}

标签: phparraysajax

解决方案


我认为你必须在你的控制器中实现这一点。现在您正在返回 json,它被视为字符串。我会在控制器中创建一个数组,然后循环它并创建 html。

 <?php    
    if(isset($_POST['search'])) {
        if($_SERVER['HTTP_X_REQUESTED_WITH'] == 'XMLHttpRequest' && isset($_POST['token']) 
            && json_decode($_POST['token']) === $_SESSION['token']){
                $search = $_POST['search'];
                $html = '<ul>';
                $content = $flavours->getAllFlavoursSearch($search);
                foreach ($content as $con) {
                    $html .= '<li><a href="">'.$con['flavour_name'].'-'.$con['flavour_company'].'</a></li>';
                }
                $html .= '</ul>';
                echo $html;
            }

    }
?>

我没有测试过它,但是是这样的,也许你必须检查查询是否返回一个数组。

问候。


推荐阅读