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

У меня проблема в моем коде. Цель состоит в том, чтобы заполнить простую форму, затем нажмите кнопку отправки. Он выполняет 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 !");
            }
        })
    })

Ответ 1

Он уже вернется, прежде чем он выполнит перезагрузку.

Вам лучше заменить:

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

с:

window.location.replace("pagehere.html");

Ответ 2

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.

Ответ 3

Попробуйте эти...

Вариант1

window.location=document.referrer;

Вариант2

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

Ответ 4

Вы не можете сделать window.history.back(); и location.reload(); в той же функции.

window.history.back() разбивает поток javascript и перенаправляет на предыдущую страницу, location.reload() никогда не обрабатывается.

location.reload() необходимо вызвать на странице, на которую вы перенаправляете при использовании window.history.back().

Я бы использовал URL для перенаправления вместо history.back, который дает вам как перенаправление, так и обновление.

Ответ 5

Это правильный ответ. Это обновит предыдущую страницу.

window.location=document.referrer;

Ответ 6

window.history.back() не поддерживает перезагрузку или обновление страницы. Но вы можете использовать следующие, если вы в порядке с дополнительным обновлением

window.history.back()
window.location.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;       
    });

Убедитесь, что вы включили этот js файл из index.html

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

Теперь у вас stateprovider или controller вы можете получить доступ к этой услуге и перемещаться по

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