简体   繁体   English

在键入 AJAX 和 PHP 时显示搜索结果

[英]Display search results while typing AJAX and PHP

I'm trying to do some kind of live search with ajax to show a list of users while typing in a search bar.我正在尝试使用 ajax 进行某种实时搜索,以在输入搜索栏时显示用户列表。 I'm struggling to return the data and display it in my view.我正在努力返回数据并将其显示在我的视图中。

what I've tried so far:到目前为止我已经尝试过:

My JQuery script:我的 JQuery 脚本:

$(document).ready(function (){
        const base_url = '<?php echo base_url();?>';
        $("#search_user").keyup(function (e){
            e.preventDefault();
            const val = $(this).value;
            $.ajax({
                type: "POST",
                url: base_url + "/public/Friendcontroller/search", // the method we are calling
                data: {search:val},
                dataType: "json",
                success: function (result) {
                    response(result);
                    console.log("Success",result);
                },
                error: function (result) {
                    console.error("unsuccessful",result);
                }
            });
        });
});

My controller function and model function:我的 controller function 和 model ZC1C425268E68385D1AB5074C17A9:

Controller search function Controller 搜索 function

public function search(): array
    {
       return $this->friend_model->liveSearch($_POST['search']);
    }

Model function Model function

public function liveSearch($val) {
        $search = array();
        $result = $val;

        $getUser = "SELECT * FROM users WHERE userName LIKE '%$result%' OR firstName LIKE '%$result%'
                        OR lastName LIKE '%$result%'";

        $query = $this->db->query($getUser);

        foreach ($query->getResult() as $row) {
            $userID = $row->userID;
            $firstName = $row->firstName;
            $lastName = $row->lastName;
            $userName = $row->userName;
            $avatar = $row->avatarUrl;
            array_push($search, array('userID' => $userID, 'firstName' => $firstName,
                'lastName' => $lastName, 'userName' => $userName, 'avatarUrl' => $avatar));
        }
        return $search;
    }

The HTML where I want to render the results:我要在其中呈现结果的 HTML :

<div style="height: 32px"></div>
    <?php foreach (//Result from AJAX call here): ?>
        <div class="tabs-stage">
            <div class="container">
                <div class="person">
                    <div class="personHead">
                        <div class="profile">
                            <img id="avatar" class="head3" src="<?=base_url()?>/public/uploads/avatars/<?=$result['avatarUrl']?>">
                        </div>
                        <div class="personName">
                            <h2><?= $result['userName'] ?></h2>
                            <h4><?= $result['firstName'] . " " . $result['lastName'] ?></h4>
                        </div>
                    </div>
                </div>
            </div>
        </div>

I think you should either return the array json encoded or "build" and return an html string to append it where ever you want on success我认为您应该返回编码的数组 json 或“构建”并将 html 字符串返回到 append 任何您想要成功的地方

If you return an html string then you can do this on success如果您返回 html 字符串,那么您可以在成功时执行此操作

success: function (result) {
                $("your div").html(result);
                console.log("Success",result);
            }

If you return json return json_encode($search);如果你返回 json return json_encode($search); then you must iterate over each row and create/append the elements you want.那么您必须遍历每一行并创建/附加您想要的元素。

You cant use php in the html anymore because it already has been run serverside,你不能再在 html 中使用 php 因为它已经在服务器端运行了,

you have to rebuild the html with javascript, something like:您必须使用 javascript 重建 html,例如:

success: function (result) {
    var $container = $('#resultContainer');
    $.each(result,function(i,res){
        $container.append('<div class="person"><h2>'+res.userName+'</h2></div>');
    });
},

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM