我正在结合使用Flask和Javascript。用户从网页输入后,我将JSON对象发送回Flask服务器。即:
var xhr = new XMLHttpRequest();
xhr.open('POST', '/completed/');
xhr.setRequestHeader('Content-Type', 'application/json');
var stringifiedObject = dataResultToJSON(data);
xhr.send(stringifiedObject);
然后在Flask中:
@main_view.route('/completed/', methods=['POST'])
def completed():
if (request.headers['Content-Type'].startswith('application/json')):
#do stuff here
return redirect(url_for("main_view.home"))
@main_view.route('/')
def home():
logger.debug(">>home")
return render_template('home.html')
当flask重定向到Ajax POST的“ home”后,我得到以下控制台输出:
DEBUG:myapp:>>home
INFO:werkzeug:127.0.0.1 - - [24/Apr/2016 20:13:15] "GET / HTTP/1.1" 200 -
INFO:werkzeug:127.0.0.1 - - [24/Apr/2016 20:13:15] "GET /%3C!DOCTYPE%20html%3E%3C!-- (... entire web page html)
奇怪的是,上面的第二条INFO语句-当我从其他任何地方重定向到首页时,我不会得到此行的打印-仅当我从“完成的” POST方法重定向时才会发生。 Werkzeug记录了整个home.html网页html,并且在Web客户端中出现错误:
NetworkError: 404 NOT FOUND - http://127.0.0.1:5000/%3C!DOCTYPE%20html%3E%3C!-- (... entire web page html)
我还按照此处的Make a POST request while redirecting in flask向重定向添加了代码= 307,但仍然收到相同的404错误。
我对如何解决这个问题感到困惑。
最佳答案
我认为您的问题是您将数据作为AJAX请求发布(即,不是浏览器导航,而是通过客户端编程方式发布)。在POST完成后告诉您的AJAX客户端重定向并没有多大意义。
然后,您试图告诉客户端进行重定向...但是重定向请求已返回到XMLHttpRequest。
我不是100%知道要发生什么,但是如果希望客户在发布数据后进行重定向,最好使用常规的表单发布。
我相信您对这个问题的回答可以更好地说明您正在尝试做的事情:
How to manage a redirect request after a jQuery Ajax call
关于ajax - 从POST方法重定向后出现 flask 错误,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/36823309/