Come faccio a ricaricare una pagina senza un POSTDATA avviso in Javascript?
-
05-09-2019 - |
Domanda
Voglio ricaricare una pagina con:
window.location.reload(true);
Ma ho visualizzato il POSTDATA avviso perché la funzione aggiorna desidera inviare di nuovo POST precedente i dati del modulo.Come posso aggiornare la mia pagina, senza che questo avviso?
AGGIORNAMENTO:Non ho alcun controllo del progetto!Io non riesco a risolvere il POST stesso!
Soluzione
Basta cambiare window.location
in JavaScript è pericoloso in quanto l'utente potrebbe ancora colpire il pulsante Indietro e inviare nuovamente il post, che potrebbe avere risultati inaspettati (come ad esempio un duplicare acquisto ). PRG è una soluzione molto migliore
Utilizzare il Post / Redirect / Get (PRG) modello
Per evitare questo problema, molte applicazioni web utilizzano il modello PRG - invece di tornare direttamente una pagina HTML, l'operazione POST restituisce un comando di reindirizzamento (utilizzando il codice di risposta HTTP 303 (a volte 302) insieme alla "posizione" risposta HTTP intestazione), istruire il browser per caricare una pagina diversa utilizzando una richiesta HTTP GET. La pagina di risultato può quindi essere tranquillamente segnalibro o ricaricato senza effetti collaterali imprevisti.
Altri suggerimenti
Non è possibile aggiornare senza avvisare; aggiornamento indica al browser di ripetere l'ultima azione. Spetta al browser di scegliere se mettere in guardia l'utente se ripetere l'ultima azione comporta inviare nuovamente i dati.
Si potrebbe ri-passare alla stessa pagina con una nuova sessione facendo:
window.location = window.location.href;
Ho avuto alcuni problemi con ancoraggio / hash-URL (compreso #) non ricaricare utilizzando la soluzione da Rex ...
Così ho finalmente finito rimuovendo la parte hash:
window.location = window.location.href.split("#")[0];
Per bypassare POST avvertimento è necessario ricaricare la pagina con URL completo. Funziona bene.
window.location.href = window.location.protocol +'//'+ window.location.host + window.location.pathname;
come su window.location.replace (window.location.href);
È possibile utilizzare JavaScript:
window.location.assign(document.URL);
Ha lavorato per me su Firefox e Chrome
controllare questo link: http: //www.codeproject. com / Consigli / 433.399 / PRG-modello-post-Redirect-Get
Questo ha funzionato
<button onclick="window.location.href=window.location.href; return false;">Continue</button>
Il motivo per cui non ha funzionato senza il
return false;è che in precedenza trattata che come una forma pulsante di invio. Con una falsa ritorno esplicito su di esso, non fa la forma presentare e fa proprio il ricaricamento della stessa pagina che è stato il risultato di una precedente POST a quella pagina.
Se si è nella fase in cui si è finito con i dati postali e vuole semplicemente visualizzare la pagina ancora una volta di nuovo, si potrebbe utilizzare un window.location e forse anche aggiungere una stringa casuale come una paramater query per garantire una nuova versione della pagina.
La versione di Nikl non passa ottenere i parametri di query, ho usato la seguente versione modificata:
window.location.href = window.location.protocol +'//'+ window.location.host + window.location.pathname + window.location.search;
o nel mio caso avevo bisogno di aggiornare la pagina più in alto \ telaio, quindi ho usato la seguente versione
window.top.location.href = window.top.location.protocol +'//'+ window.top.location.host + window.top.location.pathname + window.top.location.search;
<html:form name="Form" type="abc" action="abc.do" method="get" onsubmit="return false;">
method="get"
- risolve il problema
if method="post"
allora solo allarme arriva.
Ho scritto una funzione che consente di ricaricare la pagina senza post di presentazione e funzionerà con hash, troppo.
Faccio questo con l'aggiunta / modifica di un parametro GET nell'URL chiamata reload
aggiornando il suo valore con il timestamp corrente in ms.
var reload = function () {
var regex = new RegExp("([?;&])reload[^&;]*[;&]?");
var query = window.location.href.split('#')[0].replace(regex, "$1").replace(/&$/, '');
window.location.href =
(window.location.href.indexOf('?') < 0 ? "?" : query + (query.slice(-1) != "?" ? "&" : ""))
+ "reload=" + new Date().getTime() + window.location.hash;
};
Tenete a mente, se si desidera attivare questa funzione in un attributo href, implementare in questo modo: href="javascript:reload();void 0;"
per farlo funzionare correttamente.
Il rovescio della medaglia della mia soluzione è cambiare l'URL, in modo che questa "ricarica" non è una vera ricarica, invece è un carico con una query diversa.Ancora, potrebbe soddisfare le vostre esigenze come per me.
non si è costretti ad utilizzare javascript per fare ogni cosa. Molti problemi hanno soluzioni semplici come questo. è possibile utilizzare questo ancoraggio ingannevole:
<a href=".">Continue</a>
naturalmente so potrebbe essere necessario una soluzione automatica, ma questo aiuterà in molti casi.
buona fortuna
utilizzando meta refresh in html
<meta http-equiv='refresh' content='1'>
utilizzando meta refresh in php
echo "<meta http-equiv='refresh' content='1'>"
Ecco una soluzione che dovrebbe sempre lavorare e non rimuove l'hash.
let currentPage = new URL(window.location.href);
currentPage.searchParams.set('r', (+new Date * Math.random()).toString(36).substring(0, 5));
window.location.href = currentPage.href;
Se si utilizza il metodo GET
invece di POST
allora possiamo non la forma valori archiviato. Se si utilizza window.opener.location.href = window.opener.location.href;
allora possiamo sparare il db e siamo in grado di ottenere il valore, ma unica cosa è il JSP
non è rinfrescante vedevamo l'scriplet avere i valori di forma.