2017-05-06 77 views
1

嗨,我创建的自动完成seacrh重定向后,搜索的Django

的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和加载我需要的网页。哪里不对?

+0

看看这个post:http://stackoverflow.com/questions/199099/how-to-manage-a-redirect-request-after-a-jquery -ajax-call – karthikr

回答

0

THX为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 
       }); 
       } 
      }); 
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) 
+0

我试着用2返回相同的。 – Hellbea