【问题标题】:My searchbox with ajax is not working in django我的 ajax 搜索框在 django 中不起作用
【发布时间】:2019-04-27 16:06:36
【问题描述】:

我正在用 django 开发一个项目,是一家电子商务商店。我想实现一个搜索框来搜索上面的产品。

我使用 ajax 进行开发,但目前我正在搜索产品。它向我展示了我拥有的所有产品,而不仅仅是我想要的产品。

这是我对搜索栏的看法:

def searchBar(request, option):

    busqueda = request.POST.get('busqueda', '')
    categoria = Clasificacion.objects.filter(existencia=True)
    items = Articulo.objects.filter(nombre_producto__icontains = busqueda)
    contexto = {
        'items':items,
        'categoria':categoria,
    }
    return render(request, 'adminview/article.html', contexto)

这是带有调用视图的表单的 html:

<form action="{% url 'adminview:searchBar' option=1 %}" method="get" class="d-none d-sm-inline-block form-inline mr-auto ml-md-0 my-2 my-md-20 navbar-search">
            <div class="input-group">
              <input type="text" id="busqueda" class="form-control bg-light border-1 small" placeholder="Buscar producto..." aria-label="Search" aria-describedby="basic-addon2" name="busqueda">
              <div class="input-group-append">
                <button class="btn btn-primary" type="submit">
                  <img src="{% static 'img/search.png'%}"width="20px" height="20px" />
                </button>
              </div>
            </div>
          </form>
   ...
   <script src="{% static 'js/search.js'%}"></script>

我的网址:

url(r'^search/ajax(?P<option>\d+)/$', searchBar, name="searchBar"),
url(r'^buscar/searchAjax/$', searchBar),

如果你需要,这是我的 javaScript 脚本:

    $(function(){
    $(‘#busqueda’).keyup(function() {
        $.ajax({
            type: “POST”,
            url: “searchAjax/”,
            data: {
                ‘busqueda’: $(‘#busqueda’).val(),
                ‘csrfmiddlewaretoken’: $(“input[name=csrfmiddlewaretoken]”).val()
            },
            success: searchSuccess,
            dataType: ‘html’
        });
    });
});

function searchSuccess(data, textStatus, jqXHR)
{
    $(‘#resultado_busqueda’).html(data);
}

希望你能帮助我,谢谢!

【问题讨论】:

  • 如果您正在取回数据,并且它是正确的数据,但只是没有过滤到正确的子集,那么问题很可能出在您的 searchBar 视图中。您可能应该为其编写一些单元测试,以验证添加每个键入的字符后会发生什么。也许想想如果用户输入的速度比你的 ajax 调用快会发生什么?
  • 我认为数据是正确的,因为如果搜索“lavadora”,我会得到 URL“search/ajax1/?busqueda=Lavadora”。但是如果我写一个单元是一样的。
  • 你肯定先得到127.0.0.1:8000/adminview/search/ajax1/?busqueda=L,然后是127.0.0.1:8000/adminview/search/ajax1/?busqueda=La,然后是127.0.0.1:8000/adminview/search/ajax1/?busqueda=Lav,等等,不是吗?
  • 当用户按下提交按钮时,它会得到整个单词,如果我写“Lavadora”并按下按钮,我会得到 127.0.0.1:8000/adminview/sea​​rch/ajax1/?busqueda=拉瓦多拉
  • 您在 ajax 中使用 POST 发送数据,但在表单中使用 GET。将表格更改为method="POST",您应该一切顺利。如果这不起作用,您需要做一些工作来完善您的问题(即删除与您所看到的特定问题无关的所有内容)。

标签: python ajax django search


【解决方案1】:

您混淆了 GET 和 POST 请求

type: "POST",

应该是

type: "GET"

busqueda = request.POST.get('busqueda', '')

应该是

busqueda = request.GET.get('busqueda', '')

【讨论】:

  • 是的,你是对的,我对 GET 和 POSTS 请求感到困惑。我纠正了这些,它有效。谢谢!。
猜你喜欢
  • 2014-10-07
  • 1970-01-01
  • 1970-01-01
  • 2019-02-04
  • 2020-11-25
  • 2014-09-06
  • 2018-09-25
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多