Ошибка неверного запроса во Flask при создании имен запросов с использованием JavaScript - PullRequest
0 голосов
/ 11 октября 2019

Я создаю приложение для расчета проекции транзита с учетом лет и некоторых других значений. Сначала я создал скрипт на javascript, в котором в зависимости от того, решит ли пользователь добавить новый тип транспортного средства, новый divсоздается с уникальными идентификаторами и именами и, конечно же, данными, введенными пользователем, для показа конечного результата, который я использую ajax, проблема возникает, когда я пытаюсь получить доступ к данным через флягу, я получаю неверный запрос от именкаждый автомобиль, как будто они не существуют, но страница на самом деле отображает их (надеюсь, вы понимаете мой английский и мою проблему :))

Я попытался дать определенное имя (a1), а затем попытался взятьзначение в колбе, но я все еще не могу заставить его работать. Python

@app.route("/pavimentos/calculoTransito" , methods=['POST'])
def calculoTransito():
    direc = float(request.form["direc"])
    zr = float(request.form["zr"])
    years  = float(request.form["years"])
    tc = float(request.form["direc"])
    vehicles = int(request.form["vehicles"])
    car1 = request.form.get("a1", None)
    if car1==None:
        print("No funciona")
    else:
        print("Funciona")

всегда получает "Нет функций"

Javascript

countClicks = 0
lista_vehiculos = []
function addVehicle(){
    countClicks += 1;

    //var automovil = document.getElementById("automovil").value
    var fd = document.getElementById("damage_factor").value
    var currentType = document.getElementById("vehicleType")

    if(currentType.value == 1){
        var icon = "<h2 class='pt-4'><i class='fas fa-car text-secondary'></i></h2>";
        var tipoVehiculo = "Automóvil";
    }

    ... More code for select the currentType ...    

    var vehicleStyle = "<div><input id=a" + countClicks + "name=a" + countClicks + "value=" + fd  + "></div>"

    lista_vehiculos.push(vehicleStyle)

    var vehicle = document.getElementById("vehiclesContainer").innerHTML += lista_vehiculos[countClicks-1]

    document.getElementById("vehicles").value = countClicks

}

AJAX часть

$(document).ready(function(){
    $('form').on('submit', function(event){
        $.ajax({
            data:{
                direc: $('#direc').val(),
                zr: $('#zr').val(),
                years: $('#years').val(),
                tc: $('#growingRate').val(),
                vehicles: $('#vehicles').val(),
                car1: $('#a1').val()
            },
            type: 'POST',
            url: '/pavimentos/calculoTransito'
        })
        .done(function(data){
            if (data.resultado){
                $('#resultado').text(data.resultado).show()
            }
        })

        event.preventDefault();

    });
});

1 Ответ

0 голосов
/ 11 октября 2019

Вы не отправляете форму, вы отправляете JSON. Начальным событием может быть отправка формы, но ваш AJAX использует event.preventDefault() и не в конечном итоге отправляет традиционную сериализованную форму. Вы не можете использовать car1 = request.form.get("a1", None) здесь.

Во-первых, вы должны исправить свой AJAX, добавив contentType:

$(document).ready(function(){
    $('form').on('submit', function(event){
        $.ajax({
            data: JSON.stringify({
                direc: $('#direc').val(),
                zr: $('#zr').val(),
                years: $('#years').val(),
                tc: $('#growingRate').val(),
                vehicles: $('#vehicles').val(),
                car1: $('#a1').val()
            }),
            type: 'POST',
            contentType: 'application/json; charset=utf-8',
            url: '/pavimentos/calculoTransito'
        })
        .done(function(data){
            if (data.resultado){
                $('#resultado').text(data.resultado).show()
            }
        })

        event.preventDefault();

    });
});

А затем вам нужно изменить метод Flask с *От 1009 * до request.json. Таким образом, сторона колбы будет выглядеть примерно так:

@app.route("/pavimentos/calculoTransito" , methods=['POST'])
def calculoTransito():
    req = request.json
    direc = float(req["direc"])
    zr = float(req["zr"])
    ...
    car1 = req.get("a1", None)
    if car1 is None: # None is a singleton, you shouldn't use == here
        print("No funciona")
    else:
        print("Funciona")

LATE EDIT

Это не может работать, потому что calculoTransito на самом деле return ничего не делает, поэтомуFlask выдаст ошибку из-за этого. Ваша функция просмотра на самом деле должна возвращать что-то, кроме неявного None.

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