Django: невозможно получить переменную из моего представления после вызова AJAX - PullRequest
2 голосов
/ 08 марта 2020

После запроса AJAX Post я пытаюсь получить из моего представления некоторые значения списка, содержащиеся в переменной. Идея состоит в том, чтобы использовать эти значения для заполнения раскрывающегося списка. Но моя переменная кажется пустой. Я думал, что это потому, что я изначально использовал функцию return render (), но даже с функцией return HttpResponse () это не работает.

Это мой views.py:

def MyView3(request):

    if request.method == 'POST' and request.is_ajax:

        myVariable = ["1", "2", "3", "4", "5"]
        print(myVariable)

        return HttpResponse(myVariable)
    else:
        return render(request,'home3.html')

Это мой html код:

<form class="wrapper" action="" method="post"> {% csrf_token %} 

  <select name="myVal" class="toChange">
    <option val="1">1</option>  
    <option val="2">2</option>   
  </select>

  <select id="dep" name="dep">
    {% for item in myVariable %}
      <option val="{{ item }}"> {{ item }} </option>    
      {% endfor %}
  </select>


  <script type="text/javascript">
    function dropdownChange () {
      var selectedValue = $(".toChange option:selected").val();
      $.ajax({
              type: 'POST',
              data: {'myVal': selectedValue},
              }); 
      var mylist = '{{myVariable}}';
      alert(mylist);
    }
    $(".toChange").change(dropdownChange);
  </script>

</form>

Идея состоит в том, чтобы вызвать вызов AJAX когда я выбираю новое значение в раскрывающемся списке myVal. Вызов работает, поскольку представление правильно активировано, так как «print (myVariable)» показывает ожидаемый результат в консоли. Кроме того, отображается мое всплывающее окно с предупреждением. Тем не менее, он пуст. Мне нужно было бы показать значения, содержащиеся в 'myVariable', поэтому '["1", "2", "3", "4", "5"]'. Я предполагаю, что это должно быть что-то простое, но я не мог понять, что. Не могли бы вы помочь?

1 Ответ

1 голос
/ 08 марта 2020

Вам не хватает URL и успешного обратного вызова в вызове Ajax. Вы можете получить ответ в случае успешного обратного вызова.

Вы получаете нулевое значение в оповещении, потому что $.ajax является асинхронной c функцией, и оповещение появится до завершения вызова ajax.

Попробуйте приведенный ниже пример.

Пример:

 <script type="text/javascript">
    function dropdownChange () {
      var selectedValue = $(".toChange option:selected").val();
      $.ajax({
              url: "<add the url>"
              type: 'POST',
              data: {'myVal': selectedValue},
              success: function(res) {
                alert(res);
              }
        });       
    }
    $(".toChange").change(dropdownChange);
  </script>

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...