16

我在 JQuery ajax 方法和 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 调用。但我只是无法将服务器中的数据作为字典获取。尝试了万种方法,我无法使其工作。

这是虚拟服务器方法:

@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':'真'}

当然,当尝试访问 json['ajax'] 时应用程序会中断,并且我收到 BAD RESPONSE 错误消息。我认为这会给我一个 python dict,因为如果两者都是字符串,request.json 和 request.data 之间会有什么区别。

我怎样才能得到一个包含在 ajax 调用中传递的所有数据的 python dict?这是否取决于我定义 contentType 的方式?它是否取决于 JSON.stringify 的使用?

帮助将不胜感激!谢谢

4

1 回答 1

17

由于请求的 mimetype,数据被放入 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")

我目前无法访问我的开发机器,所以我没有对此进行测试,但根据我对文档的理解,它应该可以工作。

于 2013-11-13T21:44:59.827 回答