Как отправить одну строку в функцию python из запроса ajax - PullRequest
0 голосов
/ 22 апреля 2020

Контекст: я использую javascript для отправки строки в качестве параметра функции python через flask. Но я всегда получаю «ошибку пропущенного 1 параметра» на стороне python.

Вот как выглядит мой запрос ajax:

$.ajax({
      url : 'ListMaker',
      data: 'Q1',
      success: function(data) {
       //does something 
      }
      });

Это то, что мой python функция выглядит следующим образом:

@app.route("/ListMaker",methods=["POST","GET"])
def ListMaker(text):
    #make it a string just incase
    quarter=str(text)

    //do things with string

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

Я неправильно отправляю данные со стороны ajax? Или я неправильно анализирую на стороне python? Любая помощь будет принята с благодарностью!

Редактировать / разъяснить ошибку NoneType из комментариев ниже:

Я отправляю:

data: JSON.stringify({"letter": "Q", "value": "25%"}) 

Я получаю ее на сторона питона вот так:

data=request.get_json()
letter=data["letter"]
value=data["value"]

1 Ответ

0 голосов
/ 22 апреля 2020

Параметры в маршруте Flask предназначены для переменных в пути, которые называются " правила переменных " в Flask:

@app.route("/ListMaker/<text>", methods=["POST", "GET"])
def ListMaker(text):
    ...

Как jQuery Ajax запросы по умолчанию GET, ваши данные будут преобразованы в строку запроса, в данном случае /ListMaker?Q1. Вы можете получить доступ к строке запроса в Flask с помощью flask.request.args.

Однако строки запроса имеют значение ключа, и вы предоставляете только ключ, который будет соответствовать Python dict {'Q1': ''}. Вам следует либо установить для данных Ajax строку типа quarter=Q1, либо использовать объект:

$.ajax({
      url : 'ListMaker',
      data: {'quarter': 'Q1'},  // or 'quarter=Q1'
      success: function(data) {
       //does something 
      }
      });

Тогда вы сможете получить к ним доступ в Flask:

@app.route("/ListMaker", methods=["POST", "GET"])
def ListMaker():  # no parameters needed
    quarter = flask.request.args["quarter"]
    # quarter == "Q1"

Если вы хотите использовать запрос POST, установите method: 'POST' в Ajax -колл и используйте flask.request.get_data() или flask.request.get_json() в Flask сторона.

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