这与How can I refresh a page with jQuery?类似,但不一样:
我调出一个模态表单,从用户那里收集一些东西并通过$.ajax()
调用将其传递给服务器。服务器发回一条路径,该路径应该成为浏览器的新window.location
。所以ajax调用想要像:
$.ajax({
// stuff
success: function (destination) {
// other stuff
window.location = destination;
}),
// still more stuff
});
只要destination
是纯路径,如/some_path
和,如果浏览器当前不在该页面上,则此方法正常。但是,如果路径 我当前所在的页面并且还包含目标 - /some_path#some_target
,我输了:浏览器只是将页面重新定位在指定的目标位置,但是没有点击服务器获取页面的全新视图,这是我需要的(因为服务器在ajax调用期间完成了一些操作)。
那么,也许我只是在location.reload()
电话后添加window.location
?我认为,当代码在返回它的页面上运行时,这将起作用。但是如果我在另一个页面上,我会遇到竞争条件,在浏览器完成window.location
更改之前调用重新加载,并且我重新加载旧页面,而不是新目标。< / p>
Blurgh。有没有办法解决这个问题?
答案 0 :(得分:2)
一种方法是检查window.location.pathname
(没有#
或?
的路径)是否与成功回调中的destination
相同:
success: function (destination) {
// other stuff
if (destination === window.location.pathname) {
window.location.reload(); // reload if we are on the same page
} else {
window.location = destination; // otherwise, navigate to "other" page
}
}),
答案 1 :(得分:0)
window.location.reload()
使用POST数据重新加载当前页面,而window.location.href=window.location.href
不包含POST数据。