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

前端 未结 7 1197
[愿得一人]
[愿得一人] 2021-02-05 05:30

I\'ve a probleme in my code. The aim is to complete a simple form, then you click on a submit button. It do an Ajax resquest to go in the method. On success in the ajax request,

相关标签:
7条回答
  • 2021-02-05 06:14

    It will have already gone back before it executes the reload.

    You would be better off to replace:

    window.history.back();
    location.reload(); 
    

    with:

    window.location.replace("pagehere.html");
    
    0 讨论(0)
  • 2021-02-05 06:17

    window.history.back() does not support reload or refresh of the page. But you can use following if you are okay with an extra refresh

    window.history.back()
    window.location.reload()
    

    However a real complete solution would be as follows: I wrote a service to keep track of previous page and then navigate to that page with reload:true

    Here is how i did it.

    '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;       
        });
    

    Make sure you have included this js file from you index.html

    <script src="scripts/components/util/route.service.js"></script>
    

    Now from you stateprovider or controller you can access this service and navigate

    var routeHistory = RouterTracker.getRouteHistory();    
    console.log(routeHistory[0].route.name)
    $state.go(routeHistory[0].route.name, null, { reload: true });
    

    or alternatively even perform checks and conditional routing

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

    Make sure you have added RouterTracker as an argument in your function in my case it was :

    .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('^');
     })
    
    0 讨论(0)
  • 2021-02-05 06:18

    Try these ...

    Option1

    window.location=document.referrer;
    

    Option2

    window.location.reload(history.back());
    
    0 讨论(0)
  • 2021-02-05 06:20

    This is the correct answer. It will refresh the previous page.

    window.location=document.referrer;
    
    0 讨论(0)
  • 2021-02-05 06:23

    After struggling with this for a few days, it turns out that you can't do a window.location.reload() after a window.history.go(-2), because the code stops running after the window.history.go(-2). Also the html spec basically views a history.go(-2) to the the same as hitting the back button and should retrieve the page as it was instead of as it now may be. There was some talk of setting caching headers in the webserver to turn off caching but I did not want to do this.

    The solution for me was to use session storage to set a flag in the browser with sessionStorage.setItem('refresh', 'true'); Then in the "theme" or the next page that needs to be refreshed do:

    if (sessionStorage.getItem("refresh") == "true") { 
        sessionStorage.removeItem("refresh"); window.location.reload()
    }
    

    So basically tell it to reload in the sessionStorage then check for that at the top of the page that needs to be reloaded.

    Hope this helps someone with this bit of frustration.

    0 讨论(0)
  • 2021-02-05 06:26

    window.history.back(); Sometimes it's an issue with javascript compatibility with ajax call or design-related challenges.

    I would use this below function for go back with the refresh.

    function GoBackWithRefresh(event) {
        if ('referrer' in document) {
            window.location = document.referrer;
            /* OR */
            //location.replace(document.referrer);
        } else {
            window.history.back();
        }
    }
    

    In your html, use:

    <a href="#" onclick="GoBackWithRefresh();return false;">BACK</a>`
    

    For more customization you can use history.js plugins.

    0 讨论(0)
提交回复
热议问题