当前,我有一个搜索页面,该页面接受输入,然后使用它在api中搜索数据。我将输入的内容从页面发布到服务器,就像这样
fetch('/search', {
method: 'POST',
headers: new Headers({'Content-Type': 'application/json'}),
body: JSON.stringify({data: input,token: token,})
})
.then(function (data) {
console.log('Request success: ', data);
})
.catch(function (error) {
console.log('Request failure: ', error);
});
服务器上的输入设置如下
req = request.get_json()
input = req['data']
然后使用上方的input
搜索并返回结果。我需要使用server side result
来确定将用户重定向到何处。我本来可以使用类似window.location.href = '/search/bad'
的东西来重定向的,但是直到下面的result.is_success()/error()
之前,我都不知道搜索是否很好
if result.is_success():
print('search was success ',result.body)
return redirect(url_for('search_bad'))
elif result.is_error():
print('search was failure ',result.errors)
return redirect(url_for('search_bad'))
我在终端中看到的是
search was failure ....
127.0.0.1 - - [01/Nov/2020 14:33:54] "POST /search HTTP/1.1" 302 -
127.0.0.1 - - [01/Nov/2020 14:33:54] "GET /search/bad HTTP/1.1" 200 -
我考虑过只使用一种表单,但是从上面的获取帖子中,搜索中还使用了令牌。我不明白为什么重定向不起作用,它只是位于搜索页面上。响应/search/bad HTTP/1.1" 200
为200,但它不会转到或重定向到错误的搜索网址。关于如何使重定向正常工作的任何想法?
答案 0 :(得分:0)
服务器重定向不是浏览器重定向。重定向只会导致fetch / curl请求新的url(如果已配置,例如curl中的-F
)
使用这样的东西怎么办?
如果搜索为“无效”,则服务器返回statusCode 400。
在客户端上,如果搜索响应的状态为400,则window.location.href = '/search/bad'
我们可以使用真实的<form>
通过浏览器(而不是通过访存或任何js客户端)提交真实的HTTP POST。在这种情况下,浏览器将跟随重定向。
答案 1 :(得分:0)
如果其他人也遇到同样的问题,我就是这样解决的=>
Python 文件
flash('some message for index page')
return redirect(url_for('index'))
在 JavaScript 中
fetch('url',{
method:'POST'
})
.then((response)=>{
if(response.redirected){
window.location.href = response.url;
}
})
.catch(function(e){
})
因此它将加载带有消息的索引页面。