Запросить флягу.

Я борюсь с методами ajax JQuery и Flask, пытаясь сделать вызов ajax для получения некоторой формы.

Мой код js выглядит следующим образом:

$.ajax({
       type: 'POST',
       url: '/projects/dummyName',
       data: JSON.stringify("{'ajax': 'True'}"),
       contentType: 'application/json;charset=UTF-8',
       dataType: 'html',
       success: function(responseData, textStatus, jqXHR) {
           $("#myform").text(responseData);
         },
       error: function (responseData, textStatus, errorThrown) {
           alert('Error: '+errorThrown + ". Status: "+textStatus);
       }
}); 

В основном, я добавляю параметр данных, чтобы позволить серверному методу, что это вызов ajax. Но я просто не могу получить эти данные на сервере как dict. Пробовал миллионные пути, не заставляя его работать.

Это метод фиктивного сервера:

@app.route('/projects/<name>', methods=['GET', 'POST'])
def projects(name=None):
    print(request.json)
    print(request.json['ajax'])
    if name:
        project = db.getProject(name)
        form = ProjectForm(project)

        if request.json['ajax'] == True:
            return render_template("myform.html", form=form)
        else:
            return render_template("projectView.html", form=form)
    else:
        return render_template("projects.html")

Итак, request.json возвращает строку:

{'ajax': 'True'}

Конечно, приложение ломается при попытке доступа к json ['ajax'], и я получаю сообщение об ошибке BAD RESPONSE. Я думал, что это дало бы мне python dict, потому что иначе какая разница между request.json и request.data, если оба являются строками.

Как я могу получить python dict со всеми данными, переданными в вызове ajax? Это зависит от того, как я определяю contentType? это зависит от использования JSON.stringify или нет?

Помощь будет очень признательна! Благодаря

Ответ 1

Данные помещаются в request.json из-за типа ввода запроса. Я считаю, что вы ищете get_json.

@app.route('/projects/<name>', methods=['GET', 'POST'])
def projects(name=None):
    req_json = request.get_json()
    print(req_json['ajax'])
    if name:
        project = db.getProject(name)
        form = ProjectForm(project)

        if req_json['ajax']:
            return render_template("myform.html", form=form)
        return render_template("projectView.html", form=form)
    return render_template("projects.html")

У меня нет доступа к моей машине dev в данный момент, поэтому я не тестировал это, но это должно работать из моего понимания документов.