2014-09-03 9 views
9

Mam problem w moim kodzie. Celem jest wypełnienie prostego formularza, a następnie kliknięcie przycisku przesyłania. Wykonuje odwołanie Ajax, aby przejść do metody. Po sukcesie w żądaniu ajax, używam windows.history.back(), aby przejść do poprzedniej strony i tutaj chcę odświeżyć tę stronę, aby odświeżyć wartości, które są modyfikowane przez formularz! Masz pomysł?Windows.history.back() + location.reload() jquery

$('#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

spróbuj location.href = document.referrer. – VPK

+0

Przekieruj z flagą w adresie URL, którą rozpoznała poprzednia strona, a następnie uruchom odświeżanie, jeśli jest obecne na poprzedniej stronie. – Novocaine

Odpowiedz

5

To już się cofnie, zanim wykona przeładowanie.

Użytkownik będzie lepiej wymienić:

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

z:

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

Spróbuję, ale nie jest to łatwe, w moim adresie URL jest identyfikator. Wartość tego identyfikatora zmienia się między pierwszą stroną a stroną formularza. Myślę, że mogę to uzyskać dzięki localstorage – Julien698

+0

możesz przekazać parametry z tym: window.location.replace ("pagehere.html? Id = 1"); – jbyrne2007

4

Nie można wykonać window.history.back(); i location.reload(); w tej samej funkcji.

window.history.back() przerywa przepływ javascript i przekierowuje na poprzednią stronę, location.reload() nigdy nie jest przetwarzana.

location.reload() musi zostać wywołane na stronie, do której przekierowujesz, używając window.history.back().

Użyłbym adresu URL do przekierowania zamiast historii.back, która zapewnia zarówno przekierowanie, jak i odświeżenie.

+0

dzięki, staram się użyć adresu URL. – Julien698

11

window.history.back(); Czasami jest problem z javascript zgodności z wywołania ajax lub wyzwaniami dotyczącymi projektu.

Użyłbym tej funkcji poniżej, aby powrócić z odświeżaniem.

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

Aby uzyskać więcej personalizacji, można użyć wtyczek history.js.

0

window.history.back() nie obsługuje ponownego ładowania lub odświeżania strony. Ale można użyć następujących jeśli jesteś w porządku z dodatkowym odświeżania

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

Jednak prawdziwym kompletnym rozwiązaniem byłby następujący: pisałem usługę śledzić poprzedniej strony, a następnie przejdź do tej strony z magazynka: true

Oto jak to zrobiłem.

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

Należy się upewnić, że plik js został dołączony do indeksu.html

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

Teraz od Ciebie stateprovider lub kontroler można uzyskać dostęp do tej usługi i nawigacja

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

lub alternatywnie nawet przeprowadzić kontrole i routingu warunkowy

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

Upewnij się, że zostały dodane RouterTracker jako argument w twojej funkcji w moim przypadku był:

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

Spróbuj tych ...

Opcja 1

window.location=document.referrer; 

Opcja 2

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

znalazłem window.location.resload (history.back()); nie działa zgodnie z oczekiwaniami - odświeża do bieżącej (nie poprzedniej) strony – Brendan

+0

to działało dla mnie. może być jakiś problem. –

Powiązane problemy