Как отправить данные в Flask от вызова Ajax и вернуть ответ в Flask от другого вызова Ajax? - PullRequest
0 голосов
/ 02 ноября 2019

Извините, если название немного сбивает с толку. Добрый пользователь здесь, в StackOverflow, помог мне заставить мое приложение Flask отображать некоторые очищенные данные, только теперь я добавил параметр в функцию, чтобы я мог очистить данные, которые я хочу найти. У меня есть поле ввода, и я хочу иметь возможность получать из него данные и передавать его в виде строки в моей функции python во Flask

Текущая сторона HTML

<!DOCTYPE html>
<html lang = "en">
<head>
    <meta charset = "utf-8">

    <title>NBA Data Web App</title>
</head>

<body>
    <script src = "http://ajax.googleapis.com/ajax/libs/jquery/3.3.1/jquery.min.js" crossorigin = "anonymous"></script>
    <form id = "nameForm" method = "POST" role = "form">
        <input name = "text">
        <button id = "searchBtn"> Search </button>
    </form>

    <div id = "container"></div>

    <script type = "text/javascript">
        //Function to take place when our search button is clicked
        $('button#searchBtn').click(function() {
            $.ajax({
                url: '/_get_data',
                data: $('form').serialize(),
                type: 'POST',
                success: function(response) {
                    console.log = response;
                },
                error: function() {
                    alert('Failure in first Ajax call');
                }
            });

            /*Everything below this was working before, as I only made one ajax call when a button was pressed. Now, when I press the button, I want to pass its contents as a string to my scrape_data() function in Flask, and return, and display, its contents as shown below. */




            //Declare our list so we can print something, and loop through it later
            var data_list;
            //Variable for our HTML table
            var rowMax = 29, html = "<table><tr>";
            //Post request
            $.post('/_get_data', {
                //If done, do this
            }).done(function(response) {
                /* Assign our scraped data to our variable that was declared earlier, 
                which is turned into an array here in JS */
                data_list = response['data'];
                //Declare some variables for making our table
                var perRow = 1, count = 0, table = document.createElement("table"),
                row = table.insertRow();
                //Loop through the data and add it to the cells
                for (var i of data_list) {
                    //Insert a cell for each piece of data
                    var cell = row.insertCell();
                    //Add the data to the cell
                    cell.innerHTML = i;
                    //Increment our count variable
                    count++;
                    //If we have met our set number of items in the row
                    if (count % perRow == 0) {
                        //Start a new row
                        row = table.insertRow();
                    }
                }
                //Add the table to our container in our HTML
                document.getElementById("container").appendChild(table);
                //If request fails
            }).fail(function() {
                alert("request failed");
            });
        });
    </script>

</body>
</html>

Python(Колба) Сторона

rom flask import Flask, render_template, jsonify, request, escape, url_for

#Get our lists to post
headers = data_headers()

#Start the flask app
app = Flask(__name__)

#Start page
@app.route('/')
def index():
    return render_template('index.html')

#What happens when our button is clicked
@app.route('/_get_data', methods = ['POST'])
def _get_data():
    text = request.form['text']

    #Here, I am trying to assign the contents of the input box of the form to a variable, so I can pass that variable as a parameter for my function.
    data = scrape_data(text)
    #Return the json format of the data we scraped
    return jsonify({'data' : data})

#Run the app
if __name__ == "__main__":
    app.run(debug = True)

В настоящее время я получаю сообщение об ошибке 405 метод не допускается. Я не уверен, что мой синтаксис в первом вызове Ajax неверен, или мне нужно разбить его на два разных @app.route(urls), так как каждый вызов идет по-разному.

1 Ответ

0 голосов
/ 02 ноября 2019

Если вы используете атрибут method элемента формы и не указали action, запрос будет отправлен /. Здесь происходит то, что когда вы нажимаете кнопку поиска, он отправляет два почтовых запроса, один на '/' и '/_get_data' от ajax. В маршрутизации Flask, если вы явно не предоставите methods=[], этот маршрут будет разрешать только GET. Удалите атрибут метода из формы, вы не должны получить метод, не допускается ошибка.

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