烧瓶-获取信息后如何重定向

时间:2020-11-01 20:03:07

标签: javascript python flask redirect fetch

当前,我有一个搜索页面,该页面接受输入,然后使用它在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,但它不会转到或重定向到错误的搜索网址。关于如何使重定向正常工作的任何想法?

2 个答案:

答案 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){
        
    })

因此它将加载带有消息的索引页面。