执行操作后重定向到相同URL不刷新页面
我们正在使用Apache、Python和Django开发一个新网站。
在开发阶段没有问题,但一旦绑定到Apache上,使用Firefox 3.5.3时,我们遇到了一个奇怪的问题。
我们访问的是:
当我们想要改变搜索的排序时,我们会把用户引导到:
http://website.fr/search/order/price/
这个页面会改变一个会话变量,然后用302代码重定向到:
问题是Apache发送了一个302的状态码,而Firefox却没有刷新页面。我们在把用户重定向回他们之前所在的页面时也遇到了同样的问题。
我们该怎么做才能强制刷新页面呢?
3 个回答
那你可以试试重定向到
http://website.fr/search/?ignoredvar=<random int>
如果你想要更好的解决方案,请提供完整的HTTP对话记录。你可以用firebug或者live http headers来追踪这个对话。
顺便说一下,上面的解决方案是我知道的唯一一个可以解决IE上Flash类似问题的方法。
我觉得你这样做不太对。相同的链接应该指向同一页面。所有关于HTTP和网页浏览器的规则都是基于这个假设的,如果你不遵循这个规则,就会遇到麻烦。你只需要把搜索参数和排序方式作为查询参数加到链接里就行了。
发生的情况是,浏览器请求新的网址,然后通过302状态码被重定向回之前的网址,而这个网址在缓存中,所以没有被刷新。像Piotr建议的那样,添加一个随机整数可以解决这个问题。为了产生随机性,你可以使用简单的时间戳。
你现在这样做的方式会让你的应用变得不符合REST的标准,也会影响用户收藏结果的功能——我在想,这真的是你想要的效果吗?
试试用303或307状态码代替302,可能会有不同的表现,值得一试。
另请参见: http://en.wikipedia.org/wiki/HTTP_302
http://en.wikipedia.org/wiki/Representational_State_Transfer