1

嗨,我创建了自动完成 seacrh

Javascript

jQuery(function() {
    $("#id_input").on('keyup', function(){
        var value = $(this).val();
        $.ajax({
            url: "{% url 'ajax_autocomplete' %}",
            data: {
              'search': value 
            },
            dataType: 'json',
            success: function (data) {
                list = data.list;
                $("#id_input").autocomplete({
                source: list,
                minLength: 3 
                });       
            }
        });        
    });
  });

看法:

def autocomplete_search(request):
      if request.is_ajax():
            game = None
            try:
                game = Game.objects.get(name=request.GET.get('search', None))
            except:
                pass
            if game is not None:
                result = redirect('games')
            else:    
                queryset = Game.objects.filter(name__startswith=request.GET.get('search', None))
                list = []
                for i in queryset:
                    list.append(i.name)
                data = {
                    'list': list,
                }
                result = JsonResponse(data)
            return result

game is not None但是当它只是将页面响应到 ajax 请求时,它并没有重定向。但是我想在game != None加载我需要的页面时停止请求。怎么了?

4

2 回答 2

0

这是因为您将重定向函数分配给变量,所以它不会那样工作。您只需要在条件结束时返回。

尝试这样的事情:

def autocomplete_search(request):
      if request.is_ajax():
            game = None
            try:
                game = Game.objects.get(name=request.GET.get('search', None))
            except:
                pass
            if game is not None:
                return redirect('games')
            else:    
                queryset = Game.objects.filter(name__startswith=request.GET.get('search', None))
                list = []
                for i in queryset:
                    list.append(i.name)
                data = {
                    'list': list,
                }
                return JsonResponse(data)
于 2017-05-06T12:34:47.547 回答
0

谢谢 karthikr 我是下一个方法

def autocomplete_search(request):
      if request.is_ajax():
            game = None
            try:
                game = Game.objects.get(name=request.GET.get('search', None))
            except:
                pass
            if game is not None:
                data = {
                    'redirect': '/link-to-redirect/'
                }
                result = redirect('games')
            else:    
                queryset = Game.objects.filter(name__startswith=request.GET.get('search', None))
                list = []
                for i in queryset:
                    list.append(i.name)
                data = {
                    'list': list,
                }
                result = JsonResponse(data)
            return result

和 jquery 改变下一个方式:

        $.get({% url 'ajax_autocomplete' %}, {
                data: $('#search-game').val()
            }, function (response) {
                if (response.redirect !== undefined) {
                    top.location.href=response.redirect;
                } else {
                list = response.list;
                $("#search-game").autocomplete({
                    source: list,
                    minLength: 2
                });
                }
            });
于 2017-05-06T15:42:04.530 回答