2012-06-02 13 views
8

Voglio creare un pulsante per ricaricare una pagina senza perdere i dati $_POST e $_SESSION.
Sul web, ho trovato questo pezzo di codice:"location.reload()" perde i dati POST/SESSION? (F5/Ctrl + R conserva i dati?)

onclick="document.location.reload();" 

E qui è il codice del mio tasto:

<a class="button" href="" style="font-size: 0.7em; padding: 5px 10px;" onclick="document.location.reload();">Recharger la page</a> 

Ma quando clicco sul pulsante, perdo i dati $_POST e $_SESSION.

Se provo con il comando da tastiera Ctrl + R (Chrome) o F5 (Firefox, IE9), il browser sta mostrando un avviso per informare me che sto ancora cercando di presentare il modulo. Se accetto, funziona.

Come posso riprodurre questo tipo di aggiornamento del browser con un comando JavaScript? O il codice del mio pulsante è sbagliato?

Grazie mille per il vostro aiuto.

risposta

2

Questo dovrebbe accadere in ogni caso fino a quando ci si trova nella stessa posizione in cui è stato inserito. Tuttavia, è normale reindirizzare dopo una richiesta POST per evitare esattamente cosa si sta tentando di fare.

Il motivo per cui il codice non funziona è il fatto che href="" causerà una richiesta GET all'URL corrente. Utilizzare href="#" per impedire che carichi una "nuova" pagina o aggiungere return false; alla fine del codice onclick="...".

+0

Quando nel premere F5, in Firefox per esempio, funziona benissimo. Voglio solo trovare un modo per farlo con un pulsante javascript? – Zorkzyd

+0

'location.reload()' dovrebbe fare il lavoro come puoi vedere su http://jsfiddle.net/ThiefMaster/thTyD/ (nota che devi prima fare clic su "Esegui" in modo che il riquadro di output sia stato effettivamente caricato tramite POST). – ThiefMaster

+0

Ma il mio codice sopra non funziona ... onclick = "document.location.reload();". È dovuto al href = ""? – Zorkzyd

9

Prova utilizzando

location.reload(true); 

Ciò eseguire un aggiornamento "hard", non ricostruire il DOM ma anche recuperare di nuovo qualsiasi risorsa dal server.

You can read more at the Mozilla Developer wiki.

A quanto pare, location.reload() è l'equivalente di F5 in scripting, mentre Ctrl+F5/Ctrl+R possono essere simulati utilizzando location.reload(true).

Inoltre, come detto ThiefMaster, vi state perdendo ;return false alla fine del vostro onclick dichiarazione, o si dovrebbe impostare il href-javascript:void 0* per evitare che il browser dalla seguente link.

* O qualsiasi altro pezzo di codice JavaScript che restituisce undefined

+0

Quando utilizzo location.reload (true), il browser invia l'avviso per notificare che sto ancora tentando di inviare il modulo. Se accetto, non funziona. È dovuto al href = ""? – Zorkzyd

+0

Questo perché il browser verrà ricaricato utilizzando esattamente gli stessi parametri e il metodo di richiesta utilizzato quando ha caricato la pagina per la prima volta. Se non vuoi ripetere questo, potresti prima memorizzare i dati in $ _SESSION e poi fare un 'header (" 303 Vedi Other ")' e un 'header (" Location: $ _SERVER ['REQUEST_URI'] ") 'per ricaricare la pagina con una richiesta GET. – user2428118

+0

Grazie per la risposta, ma ThiefMaster mi ha dato la soluzione :) – Zorkzyd