Come il browser non invia l'hash al server di default, l'unico modo per farlo è quello di utilizzare un po 'di Javascript:
Quando il form sostiene, afferrare l'hash (window.location.hash) e memorizzarlo in un campo di input nascosto lato server. Metti questo in un DIV con un id di "urlhash" in modo che possiamo trovarlo facilmente in seguito.
Sul server è possibile utilizzare questo valore se è necessario fare qualcosa con esso. Puoi persino cambiarlo se necessario.
In caricamento pagina sul client, verificare il valore di questo campo nascosto. Dovrai trovarlo tramite il DIV in cui è contenuto poiché l'ID generato automaticamente non sarà noto. Sì, si potrebbe fare qualche trucco qui con .ClientID ma abbiamo trovato più semplice usare il DIV wrapper in quanto permette a tutto questo Javascript di vivere in un file esterno e di essere usato in modo generico.
Se il campo di input nascosto ha un valore valido, impostarlo come hash dell'URL (window.locaion.hash di nuovo) e/o eseguire altre azioni.
Abbiamo usato jQuery per semplificare la selezione del campo, ecc ... tutto sommato si finisce per essere un paio di jQuery chiama, uno per salvare il valore, e un altro per ripristinarlo.
Prima di presentare:
$("form").submit(function() {
$("input", "#urlhash").val(window.location.hash);
});
al caricamento della pagina:
var hashVal = $("input", "#urlhash").val();
if (IsHashValid(hashVal)) {
window.location.hash = hashVal;
}
IsHashValid() può verificare la presenza di "indefinito" o altre cose che non si desidera gestire.
Inoltre, assicurarsi di utilizzare $ (document) .ready() in modo appropriato, ovviamente.
fonte
2013-04-20 08:36:28
Beh, in realtà potresti 'urlencode ('#')' l'hash a "% 23" e poi 'urldecode ('% 23')' a "#" di nuovo sul server, quindi * * * viene trasferito al server. Questo non usa JavaScript, come richiesto da OP, ma PHP. Se non vuoi usare PHP, puoi scrivere "% 23" nel tuo codice HTML a mano ;-) –
No @what, non è affidabile. Se l'hash fosse dopo una stringa di query, il '% 23' sarebbe semplicemente trattato come parte del valore cioè'? Foo = bar% 23what', farebbe in modo che il server interpreti letteralmente come $ foo = 'bar # cosa'. –
@OliverWilliams ya approccio migliore è usare parametri di query –