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!

È stato utile?

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.

Autorizzato sotto: CC-BY-SA insieme a attribuzione
Non affiliato a StackOverflow
scroll top