2014-09-03 22 views
9

Ho un problema nel mio codice. L'obiettivo è completare un modulo semplice, quindi fare clic su un pulsante di invio. Fa una richiesta Ajax per andare nel metodo. In caso di successo nella richiesta Ajax, io uso Windows.history.back() per andare alla pagina precedente ans qui voglio aggiornare questa pagina, per aggiornare i valori che sono modificati dal modulo! Hai un'idea a riguardo?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

provare a utilizzare location.href = document.referrer. – VPK

+0

Reindirizza con un flag nell'url che la pagina precedente può riconoscere, quindi attiva un aggiornamento se è presente nella pagina precedente. – Novocaine

risposta

5

Sarà già tornato prima dell'esecuzione della ricarica.

Si sarebbe meglio sostituire:

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

con:

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

lo proverò, ma non è facile, nel mio url c'è un ID. Il valore di questo ID, cambia tra la prima pagina e la pagina del modulo. Penso che posso ottenerlo con localstorage – Julien698

+0

è possibile passare parametri con questo: window.location.replace ("pagehere.html? Id = 1"); – jbyrne2007

4

Non è possibile eseguire window.history.back(); e location.reload(); nella stessa funzione.

window.history.back() interrompe il flusso javascript e reindirizza alla pagina precedente, location.reload() non viene mai elaborato.

location.reload() deve essere richiamato sulla pagina a cui viene effettuato il reindirizzamento quando si utilizza window.history.back().

Avrei usato un URL per reindirizzare invece di history.back, che fornisce sia un reindirizzamento che un aggiornamento.

+0

grazie, provo a usare un url. – Julien698

11

window.history.back(); A volte è un problema di compatibilità con javascript chiamata AJAX o sfide di progettazione legate.

Vorrei utilizzare questa funzione per tornare indietro con l'aggiornamento.

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

Per ulteriori personalizzazioni è possibile utilizzare i plug-in history.js.

0

window.history.back() non supporta il ricaricamento o l'aggiornamento della pagina. Ma è possibile utilizzare i seguenti se si sta bene con un aggiornamento in più

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

Tuttavia sarebbe una vera e propria soluzione completa come segue: Ho scritto un servizio per tenere traccia della pagina precedente e quindi passare a quella pagina con ricarica: true

Ecco come l'ho fatto.

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

Assicurarsi di aver incluso questo file js dall'indice.html

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

Ora da voi stateprovider o il controller è possibile accedere a questo servizio e navigare

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

o in alternativa anche eseguire controlli e di routing condizionale

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

Assicurarsi di aver aggiunto RouterTracker come un argomento nella tua funzione nel mio caso era:

.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

Prova questi ...

Option1

window.location=document.referrer; 

Option2

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

ho trovato window.location.reload (history.back()); non funziona come previsto - aggiorna alla pagina corrente (non precedente) – Brendan

+0

che aveva funzionato per me. potrebbe essere un problema. –

Problemi correlati