2016-05-12 70 views
0

AJAX调用未向view.py发送新的查询字符串。调用成功,但数据库不会更新结果。我想我什么都不做?如何让查询字符串到达​​views.py?一切正常,如果我带走.preventDefault()。我非常确定我需要在我的views.py中进行编辑。Django在使用AJAX时未收到新的查询字符串

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) 

UPDATE

我做了一些挖掘,这link有助于解释一些事情。我基本上必须创建一个包含page所有内容的单独视图。这个新视图有'逻辑',处理了ajax请求并吐出了结果,然后我告诉我的AJAX调用发送给div。不要忘记为新视图制作一个网址。这是你需要发送ajax请求的地方。

回答

2

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

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

这由于某种原因是行不通的。任何理由?你确定没有什么我需要添加到我的views.py吗? – Kervvv

+0

对不起,我没有用过Django。但我不明白为什么需要特别的东西。这发送参数的方式与发送它的方式完全相同,如果您执行常规表单提交而不是AJAX。而你说过,当你取出'.preventDefault()'时,表单会起作用,这会导致它正常提交表单。 – Barmar

+0

在'success:'函数中是否有代码显示DOM中返回的HTML? – Barmar