Windows.history.back()+ location.reload()jquery

时间:2014-09-03 08:05:46

标签: javascript jquery ajax

我的代码中存在问题。目的是完成一个简单的表单,然后单击一个提交按钮。它执行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 !");
            }
        })
    })

8 个答案:

答案 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中重新加载,然后在页面顶部检查是否需要重新加载。

希望这可以帮助有些沮丧的人。