javascript - 在 flask 应用程序中,如何根据 View 中发现的条件在 ajax 发布期间重定向到新页面?

标签 javascript jquery python ajax flask

在我的 Flask 应用程序中,我有一个销售页面,它收集信息并通过 ajax post 请求将其保存到数据库中。可供用户记录销售额的控制台数量有限。一个用户可以从另一个用户那里接管控制台,但在这种情况下,我希望初始用户无法访问控制台。在销售页面的 View 中检索到的控制台数据具有确定这一点所需的信息(每次新销售后可用)。

我知道我无法在 View 中使用标准的“return redirect(url_for(‘dup_console’))”来执行此操作,因为我是通过 ajax 调用发帖。

我花了很多时间搜索 SO 并找到了建议在 ajax 调用的成功部分执行条件逻辑的解决方案

示例:

success: function(data) {
    if (data.redirect) {
        window.location.href = data.redirect;
    }
}

我不确定这是否适用于我的情况,因为我不知道如何将控制台数据从 View 获取到成功例程。当我检查来自成功例程的响应信息时,它包含来自页面的 html。

有没有办法从 View 中获取我需要的信息到ajax post的成功例程?

这是我的一部分代码(我试图将其缩减为相关部分):

查看 - 销售控制台

@main.route('/sales_console/<int:id>', methods=['GET', 'POST'])
@login_required
def sales_console(id):
    product_data = get_product_data()
    console_data = get_console_data(id)
    if request.method == 'POST':
        returned_data = json.dumps(request.get_json())
        returned_data_dict = ast.literal_eval(returned_data)

        <review returned data and store in database>

        <retrieved data indicates if console id used by other device>
        if duplicate_console:
            redirect to page indicating console loss (I know I can’t do it like this)

return render_template('sales_console.html', product_data=product_data, console_data=console_data)

可用于 sales_console.html 模板的 Java 脚本例程

function record_sale(event,track_sales_data,console_number)
{
    var sales_data_json = JSON.stringify(track_sales_data);
    var url = "/sales_console/"+console_number;
    $.ajax({
        url: url,
        type : "POST",
        data: sales_data_json,
        contentType:"application/json",
        success: function(response) {
            console.log("success!!!");
            console.log(response);
        },
        error: function(error) {
            console.log("failure!!!");
            console.log(error);
        }
    });
};

最佳答案

在 python 中,返回任何你想在成功时重定向的路径作为你返回的 json 对象的一部分,像这样:

from flask import jsonify

# ...

if request.method == 'POST':
  # ...
  return jsonify(dict(redirect='path'))

在 javascript 中,将返回的路径分配给 location.href 属性,以触发重定向。像这样:

// ...
success: function(response) {
  if (response.redirect) {
    window.location.href = response.redirect;
  }
}

关于javascript - 在 flask 应用程序中,如何根据 View 中发现的条件在 ajax 发布期间重定向到新页面?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/44682326/

相关文章:

javascript - QUnit 忽略源错误

javascript - 谷歌地图地理编码服务

jquery - 模态响应高度

javascript - 原生 JavaScript document.ready - 如何使用 bindReady()

jquery - 如何在列表之间只有单一方向的 Jquery 可排序元素?

python - Selenium - 在每一行代码之后等待

javascript - URL.createObjectURL(blob) : How do I give a "meaningful filename" to a dynamically generated . pdf?

javascript - 用 <br> 标签替换新行字符

python - 当缺少所需的环境变量时应该引发哪个异常?

python - Pandas 按 2 列的条件按聚合数据框分组