jquery ajax 加载结果列表,即使没有任何查询

Posted

技术标签:

【中文标题】jquery ajax 加载结果列表,即使没有任何查询【英文标题】:jquery ajax loads list of results even there's nothing to query 【发布时间】:2013-09-15 05:20:14 【问题描述】:

所以我正在学习 jquery 和 ajax 的教程,直到现在我有一个用于搜索和返回搜索结果的搜索表单。它工作正常。但是当我从表单中删除单词或退格单词时,它会加载列表中的所有状态。我该怎么做才能仅在有单词时返回,如果表单中没有单词则不返回任何内容。

status.html的sn-p:

% block add_account %
<input type="text" id="search" name="search" />

<ul id="search-results">

</ul>

% endblock %

ajax.js:

$(function() 

    $('#search').keyup(function() 

        $.ajax(
            type: "POST",
            url: "/status/search_status/",
            data: 
                'search_text' : $('#search').val(),
                'csrfmiddlewaretoken' : $("input[name=csrfmiddlewaretoken]").val()
            ,
            success: searchSuccess,
            dataType: 'html'
        );
    );
);

function searchSuccess(data, textStatus, jqXHR)

    $('#search-results').html(data)

ajax.html:

% if statuss.count > 0 %

% for status in statuss %
    <li><a href="/status/get/status.id/">status.status</a></li>
% endfor %

% else %

<p>None to show</p>

% endif %

views.py

def search_status(request):
    if request.method == "POST":
        search_text = request.POST['search_text']
    else:
        search_text=''

    statuss = Status.objects.filter(status__icontains = search_text)

    return render(request, 'ajax_search.html', 'statuss':statuss)

【问题讨论】:

【参考方案1】:
$('#search').keyup(function () 
    if (!$.trim(this.value).length) return; //<< returns from here if nothing to search
    $.ajax(
        type: "POST",
        url: "/status/search_status/",
        data: 
            'search_text': $('#search').val(),
                'csrfmiddlewaretoken': $("input[name=csrfmiddlewaretoken]").val()
        ,
        success: searchSuccess,
        dataType: 'html'
    );
);

顺便说一句,如果用户输入太快,您应该限制您的 keyup 请求以避免多次调用:

(function () 
    var throttleTimer;
    $('#search').keyup(function () 
        clearTimeout(throttleTimer);
        throttleTimer = setTimeout(function () 
            if (!$.trim(this.value).length) return;
            $.ajax(
                type: "POST",
                url: "/status/search_status/",
                data: 
                    'search_text': $('#search').val(),
                        'csrfmiddlewaretoken': $("input[name=csrfmiddlewaretoken]").val()
                ,
                success: searchSuccess,
                dataType: 'html'
            );
        , 100);
    );
());

【讨论】:

@Robin 返回什么?你的意思是?如果有东西要搜索,应该发送请求 很抱歉,您提供的第一个脚本没有返回任何内容,我没有任何意义。但第二个有效。但是,当我在表单中退格时,它仍然显示列表中的最后一个查询......我做错了什么? @Robin 而不是 keyup,尝试使用 keypress。对于第一个脚本,必须工作,所以你在某处做错了什么。始终检查您的控制台是否存在拼写错误 keypress 什么都不返回。我刚刚复制并粘贴了你给我的脚本。 会不会是jquery版本的原因?

以上是关于jquery ajax 加载结果列表,即使没有任何查询的主要内容,如果未能解决你的问题,请参考以下文章

在 jquery 中显示发送结果之前显示加载

父容器的ajax重新加载后链接停止工作

jquery Loader Widget 未显示

jQuery+php+Ajax文章列表点击加载更多功能

drupal7 - 使用 ajax(jquery) 加载节点

jQuery ajax 调用没有响应