我的代码中存在问题。目的是完成一个简单的表单,然后单击一个提交按钮。它执行Ajax resquest以进入该方法。在ajax请求成功后,我使用windows.history.back()转到上一页这里我要刷新此页面,刷新由表单修改的值!你知道吗?
$('#form_edit').submit(function (e)
{
e.preventDefault();
$.ajax({
url: $('#form_edit').attr('action'),
type: 'POST',
cache: false,
data: $(this).serialize(),
success: function (data) {
if (data === true) {
alert("Modification réussie !");
window.history.back();
location.reload(); <= on success i want to refresh previous page
}
else {
alert("Modification échouée !");
}
},
error: function ()
{
alert("Modification échouée !");
}
})
})
答案 0 :(得分:28)
window.history.back();
有时,javascript与ajax调用或与设计相关的挑战兼容是一个问题。
我会使用以下函数返回刷新。
function GoBackWithRefresh(event) {
if ('referrer' in document) {
window.location = document.referrer;
/* OR */
//location.replace(document.referrer);
} else {
window.history.back();
}
}
在你的html中,使用:
<a href="#" onclick="GoBackWithRefresh();return false;">BACK</a>`
要进行更多自定义,您可以使用history.js个插件。
答案 1 :(得分:10)
试试这些......
选项1
window.location=document.referrer;
1选项
window.location.reload(history.back());
答案 2 :(得分:9)
在执行重新加载之前它已经回来了。
你最好更换:
window.history.back();
location.reload();
使用:
window.location.replace("pagehere.html");
答案 3 :(得分:7)
你不能做window.history.back();和location.reload();在相同的功能。
window.history.back()打破了javascript流并重定向到上一页,从不处理location.reload()。
在使用window.history.back()时,必须在您重定向到的页面上调用location.reload()。
我会使用url重定向而不是history.back,它会为您提供重定向和刷新。
答案 4 :(得分:2)
这是正确的答案。它将刷新上一页。
window.location=document.referrer;
答案 5 :(得分:1)
我知道这篇文章很旧,但这会有所帮助。
window.location.replace(document.referrer);
答案 6 :(得分:0)
window.history.back()不支持重新加载或刷新页面。但是如果你可以额外刷新,你可以使用以下
window.history.back()
window.location.reload()
然而,一个真正完整的解决方案如下: 我编写了一个服务来跟踪上一页,然后使用reload导航到该页面:true
我是这样做的。
'use strict';
angular.module('tryme5App')
.factory('RouterTracker', function RouterTracker($rootScope) {
var routeHistory = [];
var service = {
getRouteHistory: getRouteHistory
};
$rootScope.$on('$stateChangeSuccess', function (ev, to, toParams, from, fromParams) {
routeHistory = [];
routeHistory.push({route: from, routeParams: fromParams});
});
function getRouteHistory() {
return routeHistory;
}
return service;
});
确保您已经包含了index.html
中的这个js文件<script src="scripts/components/util/route.service.js"></script>
现在,您可以从stateprovider或控制器访问此服务并导航
var routeHistory = RouterTracker.getRouteHistory();
console.log(routeHistory[0].route.name)
$state.go(routeHistory[0].route.name, null, { reload: true });
或者甚至执行检查和条件路由
var routeHistory = RouterTracker.getRouteHistory();
console.log(routeHistory[0].route.name)
if(routeHistory[0].route.name == 'seat') {
$state.go('seat', null, { reload: true });
} else {
window.history.back()
}
确保在函数中添加了RouterTracker作为参数 在我的情况下它是:
.state('seat.new', {
parent: 'seat',
url: '/new',
data: {
authorities: ['ROLE_USER'],
},
onEnter: ['$stateParams', '$state', '$uibModal', 'RouterTracker', function($stateParams, $state, $uibModal, RouterTracker) {
$uibModal.open({
//....Open dialog.....
}).result.then(function(result) {
var routeHistory = RouterTracker.getRouteHistory();
console.log(routeHistory[0].route.name)
$state.go(routeHistory[0].route.name, null, { reload: true });
}, function() {
$state.go('^');
})
答案 7 :(得分:0)
经过几天的努力,事实证明您无法在window.history.go(-2)
之后执行window.location.reload(),因为代码在window.history.go(-2)
之后停止运行。 html规范基本上也将history.go(-2)
视为与单击后退按钮相同的功能,并且应该按原样而不是现在的方式检索页面。有人谈论在Web服务器中设置缓存头以关闭缓存,但我不想这样做。
对我来说,解决方案是使用会话存储在sessionStorage.setItem('refresh', 'true');
的浏览器中设置一个标志,然后在“主题”或需要刷新的下一页中执行:
if (sessionStorage.getItem("refresh") == "true") {
sessionStorage.removeItem("refresh"); window.location.reload()
}
所以基本上告诉它在sessionStorage中重新加载,然后在页面顶部检查是否需要重新加载。
希望这可以帮助有些沮丧的人。