【问题标题】:Django not receiving new query string when using AJAXDjango 在使用 AJAX 时没有收到新的查询字符串
【发布时间】:2016-09-08 23:55:05
【问题描述】:

AJAX 调用未向views.py 发送新的查询字符串。调用成功,但数据库没有更新结果。我想我什么都没有?如何使查询字符串到达​​views.py?如果我带走.preventDefault(),一切都会很好。我很确定在我的views.py中需要编辑一些东西。

html:

<form method="GET" action="">
<input id='foo' type='text' name="search" value="{{ request.GET.search }}"/>
<input type='submit'/>
</form>

javascript:

    $(document).ready(function(){
        $("form").submit(function(e){
        e.preventDefault(); //stop submit
            $.ajax({
                type: "GET",
                url: "{% url 'index' %}",
                data: $('#foo').val(),
                success: function(data){
                        // alert($('#foo').val());
                }
            });
        });
    });

views.py

def page(request):
    stuff = model.objects.all()
    query = request.GET.get("search")
    if query:
        stuff = stuff.filter(
            Q(field__icontains=query)

            )
    context = {'stuff': stuff,
    }
    return render(request, 'app/page.html', context)

更新

我做了一些挖掘,这个link 帮助进一步解释了事情。我基本上必须创建一个单独的视图,其中包含 page 的所有内容。这个新视图具有“逻辑”,处理 ajax 请求并输出结果,然后我告诉我的 AJAX 调用发送到一个 div。不要忘记为新视图创建一个 url。这是您需要将 ajax 请求发送到的地方。

【问题讨论】:

    标签: javascript ajax django django-forms django-views


    【解决方案1】:

    您没有在data: 选项中指定参数名称search

    data: { search: $("#foo").val() },
    

    【讨论】:

    • 由于某种原因这不起作用。有什么理由吗?你确定我不需要添加到我的 views.py 中吗?
    • 对不起,我没用过 Django。但我不明白为什么需要任何特别的东西。如果您执行普通表单提交而不是 AJAX,这会以与发送参数完全相同的方式发送参数。并且你说在取出.preventDefault()时表单可以正常提交,导致它可以正常提交表单。
    • success: 函数中是否有代码可以在 DOM 中显示返回的 HTML?
    • 好的,谢谢你的澄清。最后一个问题:url 部分当前设置为将请求发送给自身(同一页面)。也许我应该将它发送到页面的特定部分?再次感谢您的回复。
    • 是的,我这样做了,它设置为显示一个隐藏的 div,它将公开查询结果(一个表)。我遇到的主要问题是刷新,刷新又隐藏了div。
    猜你喜欢
    • 1970-01-01
    • 2013-02-05
    • 2011-10-04
    • 1970-01-01
    • 2020-08-11
    • 1970-01-01
    • 2011-08-06
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多