我正在使用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')
当烧瓶重定向到' home'在Ajax POST之后,我得到以下控制台输出:
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)
我还在此处向重定向添加了代码= 307:Make a POST request while redirecting in flask但仍然遇到了相同的404错误。
我很困惑如何解决这个问题。
答案 0 :(得分:1)
我认为您的问题是您将数据作为AJAX请求发布(即不是浏览器导航,而是以编程方式从您的客户端发布)。在POST完成后告诉您的AJAX客户端重定向没有多大意义。
然后您尝试告诉客户端重定向...但重定向请求将返回到XMLHttpRequest。
我并不是100%确定你想要发生什么,但是如果你希望客户端在发布数据后重定向,你可能最好使用常规表单帖子。
我相信这个问题的答案可以更好地说明你想要做的事情:
答案 1 :(得分:1)
我按照上面的评论和回答完成了这项工作。具体来说,我做了:
def completed():
#other code here
return url_for("main_view.home")
和JS:
xhr.onreadystatechange = function() {
if (xhr.readyState == XMLHttpRequest.DONE) {
var OK = 200;
if (xhr.status === OK) {
window.location.href = xhr.responseText;
}
else {
console.log ('Error: ' + xhr.status);
}
}
};