javascript - jQuery ajax 不断添加越来越多的元素

标签 javascript php jquery codeigniter

当用户搜索用户名时,他会得到结果。当他退格或修改查询时,结果只是不断添加到之前的结果之上,而不是修改结果并返回新的更新结果。我到处修改了脚本,但还没有成功。

我的看法:

<div class='container'>
    <div class='row'>
        <div class='col-sm-6 col-xs-12 col-centered'>
            <div class='panel panel-default'>
                <div class='panel-heading sticky'>
                    <div class='back pull-left'><a href='<?php echo site_url('chats') ?>'><span class='glyphicon glyphicon-chevron-left'></span></a></div>
                    <h1 class='panel-title text-center'>New Chat</h1>
                    <input class='form-control' id='search-field' type='text' placeholder='Username'>
                </div>
                <div class='panel-body'>
                    <ul class='users collapse'>
                    </ul>
                </div>
            </div>
        </div><!--end column-->
    </div><!--end row 1-->
</div><!--end container-->

我的JS:

$(function() {
    var $search_field = $('#search-field');

    $search_field.on('keyup', searchByUsername);
    $search_field.focus();
});

function searchByUsername(e) {
    var username      = this.value.trim();
    var keyCode       = e.keyCode;
    var data          = {username : username};
    var $usersElement = $('.users');
    var users         = [];


    // Use this condition to prevent searching when whitespace is entered
    if (username) {
        var request = $.ajax({
            url      : site_url + 'search/searchByUsername/',
            method   : 'GET',
            data     : data,
            dataType : 'json'
        });

        request.done(function(jsonRepsonse) {

            if (jsonRepsonse) {
                var status        = jsonRepsonse.status;
                var usernames     = jsonRepsonse.usernames;

                if (status === 'success') {
                    $.each(usernames, function(index, value) {
                        // must be one line or will throw syntax error
                        users.push("<li class='user text-center'><a href='#'><span class='glyphicon glyphicon-user'></span><strong class='username'>" + value + "</strong></a></li>");
                    });console.log(users);

                    $usersElement
                        .append(users)
                        .show();

                }
            }
        });

        request.fail(function(xhr, status, error) {
            console.log(error);
        });
    }
    users.length = 0
    $usersElement.hide();
}

我的Codeigniter Controller 功能:

    public function searchByUsername()
    {   
        $username  = $this->input->get('username', true);
        $usernames = [];

        if (!empty($username)) {
            $usernames = $this->find_users_model
                            ->searchByUsername($username);
        }


        if (!empty($usernames)) {
            $this->jsonResponse(
                ['status'    => 'success',
                 'usernames' => $usernames]);

            return;
        }

        $this->jsonResponse(
                ['status' => 'success',
                 'usernames' => ['User not found']]);
    }

    private function jsonResponse($response)
    {
        $this->output
            ->set_status_header(200)
            ->set_content_type('application/json', 'utf-8')
            ->set_output(json_encode($response));
    }

结果:

enter image description here

最佳答案

这是您的用户容器:

var $usersElement = $('.users');

在 ajax 响应中,您执行以下操作:

$usersElement.append(users).show();

但你总是追加,从不删除。尝试清空该元素,然后再次使用 users 填充该元素:

$usersElement.empty().append(users).show();

关于javascript - jQuery ajax 不断添加越来越多的元素,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/49479793/

相关文章:

javascript - reactJS 对象状态数组 - 我如何在 setState() 中引用状态数组对象

javascript - 为什么 eval() 对导入函数不起作用?

javascript - 无法第二次读取未定义的属性

jquery - 同位素过滤按钮状态不起作用

javascript - 如何设置图像以根据两个不同的单选按钮更改源?

javascript - 如何动态更改 HTML 的内容

javascript - 从 Dart 创建 js 对象

php - 我的 php 登录表单有什么问题?

php - Laravel 5 使用关系查询导致 "Call to a member function addEagerConstraints() on null"错误

php - 为什么我在 PHP 中的 SQL 查询失败?