Вопрос:

Переменная переменные данных после колбы

jquery python ajax flask

198 просмотра

2 ответа

676 Репутация автора

На этот вопрос уже есть ответ здесь:

Я использую AJAX для отправки данных в POST во Flask, однако мои POST-данные - это не то, что мои навыки могут проанализировать. Может кто-нибудь помочь мне попытаться понять, как я могу разобрать эти переменные в список?

Данные в Flask выглядят так:

items%5B%5D=104-92923-G42LH&items%5B%5D=102-10001-CRD-P07G19&items%5B%5D=104-92925-SML-CLRH&items%5B%5D=104-92923-92R-LH&items%5B%5D=104-92924-COLTRH

Когда я декодирую его с помощью онлайн-декодера, я вижу:

items[]=104-92923-G42LH&items[]=102-10001-CRD-P07G19&items[]=104-92925-SML-CLRH&items[]=104-92923-92R-LH&items[]=104-92924-COLTRH

Моя проблема в том, что я понятия не имею, как разобрать эту строку в список. Я использовал разные requestфункции, чтобы посмотреть, смогу ли я представить данные другим способом, но все же мне не повезло. В настоящее время я использую data = request.stream.read()в своей колбе функцию, чтобы увидеть данные.

Кроме того, вот моя функция AJAX:

$("#myForm").submit(function(e) {
            var url = "http://127.0.0.1:8080/_data";
            var result = [];
                $('.varSku').each(function () {
                result.push($(this).data("sku"));
                });
            var data1 = {items: result};
            $.ajax({
                type: "POST",
                url: url,
                dataType : "string",
                data: data1,
                success: function(data)
                {
                    console.log(data);
                }
                });
            e.preventDefault();
        });

Моя функция колбы:

@app.route('/_data', methods=['GET','POST'])
def invoice():
    data = request.stream.read()
    print data.decode('utf8') 
    return "data"

Любая помощь приветствуется.

Автор: Dusty Boshoff Источник Размещён: 08.04.2017 04:34

Ответы (2)


0 плюса

1168 Репутация автора

Вы ищете request.form, он автоматически анализирует содержимое тела в словарь. В вашем случае вы должны использовать request.form["items"].

Проверьте документацию для получения дополнительной информации.

Автор: Martín De la Fuente Размещён: 08.04.2017 04:51

0 плюса

676 Репутация автора

Решение

Проблема заключалась в том, что при отправке данных POST, содержащих значения, которые являются массивами или объектами, jQuery следует PHP-соглашению о добавлении скобок к именам полей.

Чтобы обойти это, я должен был использовать другую функцию, вызванную, MultiDict.getlist()и поэтому я должен был изменить наrequest.form.getlist("items[]")

Спасибо за помощь @Martin

Автор: Dusty Boshoff Размещён: 08.04.2017 05:26
Вопросы из категории :
32x32