【问题标题】:Flask - how to redirect after fetch postFlask - 如何在获取帖子后重定向
【发布时间】:2021-02-14 13:42:04
【问题描述】:

目前我有一个搜索页面,它接受输入,然后使用它来搜索 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 -

我考虑过简单地使用表单,但从上面的获取帖子中,搜索中也使用了令牌。我不明白为什么重定向不起作用,它只是坐在搜索页面上。有一个 200 响应 /search/bad HTTP/1.1" 200 但它不会转到/重定向到错误的搜索 url。关于如何使重定向起作用的任何想法?

【问题讨论】:

    标签: javascript python flask redirect fetch


    【解决方案1】:

    服务器重定向不是浏览器重定向。重定向只会导致 fetch/curl 请求新的 url(如果已配置,如 curl 中的 -F

    使用类似的东西怎么样?

    如果搜索结果为“无效”,则服务器返回 statusCode 400。 在客户端,如果搜索响应的状态为 400,则window.location.href = '/search/bad'

    您可以使用真实的<form> 来通过浏览器(而不是通过 fetch 或任何 js 客户端)提交真实的 http POST。在这种情况下,重定向将跟随浏览器。

    【讨论】:

      【解决方案2】:

      如果其他人也面临同样的问题,这就是我解决的方法 =>

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

      所以它会加载带有消息的索引页面。

      【讨论】:

        猜你喜欢
        • 2017-02-05
        • 2017-11-13
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2012-02-20
        • 2020-01-16
        • 1970-01-01
        • 2015-03-17
        相关资源
        最近更新 更多