2

我正在创建一个 Web 应用程序。

在 javascript 中,我对我的 python 脚本进行 ajax 调用,处理并将结果作为响应发送回。/process/ 是用于处理作为 json 发送的值的 python 脚本的路径,即 value1 和 value2。我在键“结果”中将响应作为 json 设置值发回。

在 ajax 的成功块中,值存储在 name_value 中,这应该作为参数传递给 python 路由方法。

Javascript:

$.ajax({
        type: "GET",
        url: "/process/",
        contentType: "application/json; charset=utf-8",
        data: { "value1" : value1,
                "value2" : value2
               },
        success: function(data) {
            var name = data.result;
            console.log(name);
            window.location.href = "{{url_for('/process2', name=name)}}"
        }
    });

Python脚本:

app.route("/process2/<name>")
def process2(name):
    print name
    render_template("user.html", name=name);

如果在 url_for 中传递参数,在这种情况下我不会收到参数值。如果我对参数进行硬编码,我可以在 python 脚本中接收参数值,如下所示,

window.location.href = "{{url_for('/process2', name='helloworld')}}"

任何帮助表示赞赏。提前致谢。

4

1 回答 1

1

根据经验,我了解到 Jinja 不能使用 Javascript 变量,如下所示:

window.location.href = "{{ url_for('/process2', name=name) }}"

如果我对此有误,请有人纠正我,您将成为我在 SO 社区中最好的朋友。

编辑:

url_for正如 Jason Heine 所提到的,您可以通过将方法作为结果传入 json来实现您想要的:

Python:

from flask import jsonify, url_for

@app.route("/process", methods=['GET', 'POST'])
def process():    
    name = 'bubba'  # code to get the name
    return jsonify({
        'result': url_for('process2', name=name),
        'name': name
     })

@app.route("/process2/<string:name>")
def process2(name):
    print name
    render_template("user.html", name=name);

Javascript:

$.ajax({
    type: "GET",
    url: "/process",
    contentType: "application/json; charset=utf-8",
    data: { "value1" : value1,
            "value2" : value2
           },
    success: function(data) {
        var route = data.result;
        var name = data.name;
        console.log(route, name);

        window.location.href = route;
    }
});

如果您还有其他问题,还可以查看带有 jQ​​uery 的 AJAX文档。

于 2014-11-24T21:58:28.637 回答