Отправлять данные на сервер Flask с помощью запроса Ajax POST - PullRequest
0 голосов
/ 26 мая 2020

Ajax запросов для меня в новинку. Я хочу отправить данные с веб-страницы на мой Flask бэкэнд с помощью запроса Ajax, но в бэкэнде ничего не отображается:

Это мой запрос:

  function confirm() {
    const xhttp = new XMLHttpRequest();
    const data = document.getElementById("tableID");
    xhttp.open("POST", "app.py");
    xhttp.setRequestHeader("Content-type", "application/x-www-form-urlencoded");
    xhttp.send(data);
    console.log(xhttp);
    console.log(data);
  }

В google chrome console запрос и данные отображаются правильно, что-то вроде:

<table id="tableID">
    <tbody>
        <tr>...</tr>
        <tr>...</tr>
        <tr>...</tr>
    </tbody>
</table>

Мой бэкэнд:

@app.route('/admintools', methods=["POST", "GET"])
def admintools():
    tracks = observed_tracks(get_tracks())
    if request.method == "POST":
        print("request.method == POST")
        print(request.form)
    if request.method == "GET":
        print("request.method == GET")
        print(request.form)
    return render_template("tools/admintools.html", tracks=tracks)

, и в терминале ничего не отображается, кроме:

request.method == GET
ImmutableMultiDict([])

(Ни разу на странице html я не говорю «ПОЛУЧИТЬ» запрос) Вы хоть представляете, что с этим не так?

1 Ответ

0 голосов
/ 26 мая 2020

Решение простое.

В зависимости от того, какой метод используется (POST, GET, PUT, ...), данные передаются по-разному.
Например, при использовании POST данные упаковываются как " Данные формы », и к ним можно получить доступ, прочитав request.form

Однако при отправке запроса GET данные отправляются не как« данные формы », а как аргументы URL, к которым можно получить доступ, прочитав request.args

Вы можете получить больше о данных запроса здесь, в документации: https://flask.palletsprojects.com/en/1.1.x/quickstart/#accessing -request-data

Edit: Прочитав вопрос еще раз, я только что понял, что " POST "в вашем коде.
Запрос может быть интерпретирован как GET, поскольку данные формы неправильно отформатированы. Данные, которые вы отправляете, должны быть в формате field_name=value,...
Посмотрите этот пост для примера: { ссылка }

...