2016-12-08 1 views
0

Я хочу отправить массив идентификаторов из моего HTML в бэкэнд Django и вернуть соответствующий запрос в качестве контекста. До сих пор у меня есть следующий код, но он просто не работает, и я не мог найти решение:Django AJAX GET-список через контекст

HTML Форма:

<form id="select_form" method="get"> 
<button type="submit" id="submit_selection_button" .btn-lg">Submit</button> 
</form> 

JQuery:

<script type="text/javascript"> 
$(document).ready(function() { 
$("#submit_selection_button").click(function() { 
    selectedFoo = [1,2]; 
    $.ajax({ 
    type: 'GET', 
    url: '/', 
    data: {'selected_foo[]': selectedFoo}}); 
    }); 
    }); 
</script> 

Django Вид:

class FooBar(TemplateView): 
    def dispatch(self, request, *args, **kwargs): 
     self.request = request 
     return super(FooBar, self).dispatch(request, *args, **kwargs) 

    def get_queryset(self): 
     return super(FooBar, self).get_queryset() 

    def get_context_data(self, **kwargs): 
     context = super(FooBar, self).get_context_data(**kwargs) 

     selected_foo = [] 
     if(self.request.method == "GET"): 
      selected_foo = self.request.GET.getlist('selected_foo[]') 

     if(selected_foo): 
      bar_results = Bar.objects.filter(id__in=selected_foo) 
     else: 
      bar_results = Bar.objects.none() 

     context = { 
      'bar_results': bar_results, 
     } 
     return context 

foobar = FooBar.as_view() 

Так что моя проблема в том, что я получаю запрос GET, но когда я пытаюсь использовать «selected_foo», он просто пуст. Вероятно, я ошибся в части jQuery, но я новичок и не знаю, что я сделал неправильно. Пожалуйста, помогите мне и объясните. Thanks

+0

Еще не работает ... – JohnDro

+0

изменения 'данных: { 'selected_foo []: selectedFoo}}); 'to' data: {'selected_foo': selectedFoo}}); ' –

+0

Я уже пробовал это. Все еще никаких изменений. На мой взгляд, это всегда относится к заявлению else. Я не уверен в форме. Должен ли быть метод = «получить» и, возможно, действие = «..»? – JohnDro

ответ

0

Несколько вещей, чтобы отметить. При использовании Ajax вы должны возвращать ответ JSON (т. Е. Ответ HTTP, в котором Content-type - application/json). Во-вторых, при выполнении вызова AJAX я обычно рекомендую использовать POST, чтобы вы могли проходить в JSON, используя request.body. YMMV.

Обновить ваш Jquery к:

<script type="text/javascript"> 
    $(document).ready(function() { 
     $("#submit_selection_button").click(function() { 
      selectedFoo = [1,2]; 
      $.post('/', {'selected_foo': selectedFoo}}); 
     }); 
    }); 
</script> 

Изменить вид:

class FooBarAjax(View): 
    def post(self, request, *args, **kwargs): 
     selected_foo = json.loads(request.body) 
     bar_results = Bar.objects.none() 
     if selected_foo: 
      bar_results = Bar.objects.filter(id__in=selected_foo) 
     return JsonResponse({ 
      'bar_results': [{ 
       # serialize Bar to a dict here so that you can pass it 
       # back as JSON 
      } for result in bar_results] 
     }) 

 Смежные вопросы

  • Нет связанных вопросов^_^