Почему Flask получает эту переменную как юникод, а не как массив? - PullRequest
0 голосов
/ 04 июня 2019

Я пытаюсь отправить массив методом Post, используя Jquery.

function post_to_url(path, params, method) {
    method = method || "post"; // Set method to post by default, if not specified.

    // The rest of this code assumes you are not using a library.
    // It can be made less wordy if you use one.
    var form = document.createElement("form");
    form.setAttribute("method", method);
    form.setAttribute("action", path);

    for(var key in params) {
        if(params.hasOwnProperty(key)) {
            var hiddenField = document.createElement("input");
            hiddenField.setAttribute("type", "hidden");
            hiddenField.setAttribute("name", key);
            hiddenField.setAttribute("value", params[key]);

            form.appendChild(hiddenField);
         }
    }

    document.body.appendChild(form);
    form.submit();
}

var url = "{{url_for('page')}}";
post_to_url(url,{'data':arrayObj}, "post");

Пока здесь, когда я использую console.log($.type(arrayObj)), возвращает мне массив.

@mod.route('/page',methods=["POST","GET"])
def page():
 if request.method=="POST":
  import pdb; pdb.set_trace()
  d = request.form['data']
  return render_template('testing/page.html',data=d)
 return render_template('testing/page.html')

Используя PDB, type(d) переменная возвращает юникод. Почему?

1 Ответ

1 голос
/ 04 июня 2019

params имеет один ключ.Цикл for выполняется один раз, и эта строка:

hiddenField.setAttribute("value", params[key]);

… устанавливает значение скрытого поля для массива, сериализованного в строку.

Если вы знаете, что все ваши ключи являются объектами массивапросто зациклите значения и вставьте несколько элементов ввода:

for (let key in params) {
    if (params.hasOwnProperty(key)) {
        let values = params[key];
        for (let value of values) {
            var hiddenField = document.createElement("input");
            hiddenField.setAttribute("type", "hidden");
            hiddenField.setAttribute("name", key);
            hiddenField.setAttribute("value", value);
            form.appendChild(hiddenField);
        }
    }
}

Если вы не знаете, что все ваши ключи являются массивами, вы можете изменить внутренний код, чтобы разделить входящие значения на запятую.Обратите внимание, что это сломается для любых значений, которые буквально содержат ,.

@mod.route('/page',methods=["POST","GET"])
def page():
 if request.method=="POST":
  d = request.form['data']
  d_array = d.split(',')
  return render_template('testing/page.html',data=d_array)
 return render_template('testing/page.html')
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...