Отправка массива целочисленных значений через AJAX post в Flask view - PullRequest
0 голосов
/ 29 января 2020

Предположим, у вас есть массив в javascript - [1,2,3], и вы хотите отправить его через AJAX post на Flask. Так что в JS:

array = new Array()
array.push(1);
array.push(2);
array.push(3);

       var data = JSON.stringify(array);
      $.ajax({
        type: "POST",
        url: "myurl",
        data: data,
        dataType: 'JSON',
        success: alert("messagesent!")
    })

И в Flask view:

@bp.route('myurl',methods=['GET', 'POST'])
def myfunction(address):
    if request.method == "POST":
        FirstSet = request.form['data']
        x = json.loads(FirstSet)

Однако теперь я не знаю, как получить доступ к определенным значениям списка x (?), потому что попытка получить к нему доступ вот так:

print(x[1]) 

не работает ... Заранее спасибо за просмотр :)

РЕДАКТИРОВАТЬ: Большее изображение: я запускаю ajax запрос onclick, но после того, как я добавляю все значения, которые я хочу, в массив, который я хочу отправить. Это выглядит так:

  $("#firstSet").on("click",function(){
      array =[]
      $("#myDiv").children().each(function()
      {
        var star = $(this).children("li.star.selected").length
        array.push(star)
      })
      alert(array)
      $.ajax({
        type: "POST",
        url: "myurl",
        data: {"data":array},
        success: alert("messagesent!")
    })

})

Этот массив предупреждений не является NoneType (и я просто получаю значения моего массива), но то, что я получаю на стороне Flask, это пустой список или NoneType (в зависимости от того, как я запрашиваю) это)

1 Ответ

0 голосов
/ 29 января 2020

Поскольку вы отправляете JSON, вы должны использовать Flask, чтобы получить это JSON с соответствующим названием .get_json():

        # ...
        FirstSet = request.get_json()

Затем FirstSet будет содержать:

[1, 2, 3]

Также убедитесь, что ваш AJAX имеет соответствующий contentType:

        // ...
        contentType: "application/json",
        dataType: "JSON"

Редактировать: Я включаю весь Javascript / JQuery что я проверяю на случай, если это поможет вам. Я завернул все в функцию готовности DOM.

    <script>
    $(document).ready(function() {
        $("#firstSet").on("click",function(){
            array = [];
            var listItems = $("#myDiv li");
            listItems.each(function(idx, li) {
                var star = $(li);
                array.push(star.length);
            });
            alert(array);
            $.ajax({
                type: "POST",
                url: "/testing",
                contentType: "application/json",
                dataType: "JSON",
                data: JSON.stringify(array)
            });
        });
    });
    </script>

И HTML:

  <button id="firstSet" name="firstSet">testing</button>
  <div id="myDiv" name="myDiv">
    <ul id="myList">
      <li data-value="1"><a href="#">1</a></li>
      <li data-value="2"><a href="#">2</a></li>
      <li data-value="3"><a href="#">3</a></li>
    </ul>
    <input id="listChoice" size="15" name="size" type="text" />
  </div>

И код Flask:

@bp.route('/testing',methods=["GET","POST",])
def testing():
    if request.method == "POST":
        print(request.get_json())
    return render_template('testing.txt')
...