2012-05-22 5 views
20

Ho un URL con una stringa di query lunga collegata ad esso. Dopo il caricamento della pagina, non ho bisogno della stringa di query. Quindi voglio rimuovere la stringa di query dalla barra degli indirizzi senza ricaricare la pagina.Come posso rimuovere la stringa di query dall'URL dopo il caricamento della pagina?

ho cercato parent.location.hash = ''; e window.location.href = '/#'

Non hanno fatto la differenza.

+0

hash è quello che viene dopo il '# '. la stringa di query è quella successiva a '?' ma prima di '#'. quello che stai facendo non ha senso. perché vorresti nasconderlo? – Joseph

+0

leggi http://stackoverflow.com/questions/136458/change-the-nur-in-the-browser-without-loading-the-new-page-using-javascript – shareef

+0

prova per favore il mio codice se funziona ora o no :) –

risposta

6

Non è possibile farlo senza ricaricare la pagina, figurarsi se si può inserire tutto ciò che si desidera nella barra degli indirizzi del browser? divertimento Sicurezza :)

Anche si può ora farlo in HTML5 (che funziona solo sui browser che lo sostengono) utilizzando la nuova history API, ma realisticamente, lo scenario migliore garantisce una riscrittura invece di includere che (sembra mazza per rompere un dado).

Come hai detto non hai bisogno della stringa di query dopo il caricamento della pagina, dovresti restituire davvero post, quindi reindirizzare a un altro URL dopo aver terminato l'elaborazione.

+7

Questo non è vero. La [storia API] (http://stackoverflow.com/a/10700997/19068) lo rende possibile. Ha alcuni limiti, il principale è che non puoi cambiare l'URL con uno che appare su un'origine diversa, ma la domanda non richiede che cambi origine. – Quentin

+2

@Quentin Hai ragione, non posso cancellarlo (è accettato) quindi ho modificato per incorporarlo. I + 1ed anche il tuo :) – mattytommo

16

Ciò è possibile in modern browsers utilizzando the history api, ma probabilmente non è la migliore soluzione al problema.

history.replaceState({}, 'some title', '/'); 

Sembra che si sarebbe meglio l'elaborazione dei dati e quindi il reindirizzamento alla home page invece di tornare direttamente un documento HTML.

Poiché non si desidera mantenere l'URL in giro, non sarà utile per il bookmarking, quindi è molto probabile che sarebbe meglio fare una richiesta POST.

Questo suggerisce che si dovrebbe usare il POST-Redirect-GET pattern.

+0

Non riesco a utilizzare un POST perché sono i dati di analisi che vengono trasmessi nella stringa di query – Sangam254

+0

Non vedo come segue. Anche se lo fosse, puoi comunque reindirizzare. – Quentin

+0

Sei un vero toccasana! Grazie ... funziona come un incantesimo! – user1656204

2

Usa history.replaceState({}, "Title", "page.html");

stessa sintassi per pushState. Tuttavia dovrai trovare un modo per farlo capire a IE.

Un modo migliore sarebbe utilizzare il modulo Apache mod_rewrite. È abbastanza facile da usare.

+0

Ma mod_rewrite reindirizzerà all'URL ritagliato prima che la pagina venga caricata – Sangam254

0

È possibile evitare completamente una stringa di query utilizzando POST anziché GET.

+0

Non riesco a utilizzare un POST perché sono i dati di analisi che vengono trasmessi nella stringa di query – Sangam254

0

Aggiornato codice Ora che funzionerà

Basta aggiungere Sotto codice nella pagina di cui link si desidera modificare.

// javascript function 

    function buildLin(first) { 
    var firs = first.toString() 
     //alert(firs); 
     //document.getElementById("team").value = "1"; 
      document.location.hash = "#" + firs.replace(/ /g, "_"); 
     //alert(document.location.hash); 
    } 

//jQuery to call above function after page loads 

    $(document).ready(function() { 
     buildLin(2); 
    }); 

Non dimenticare di aggiungere http://code.jquery.com/jquery-latest.js sulla tua pagina

+0

Grazie per il codice. Ma aggiunge un # 2 alla fine dell'URL (dopo la stringa di query). Volevo rimuovere la stringa di query dall'URL dopo il caricamento della pagina. – Sangam254

0

Ho affrontato lo stesso problema.La mia soluzione era questi: Prendi la richiesta in questo modo:

operation.aspx?opr=lock 

Dopo aver terminato l'operazione di reindirizzamento in questo modo:

Response.Redirect("operation.aspx"); 

Nella risposta, se c'è qualche messaggio, io li stampare in questo modo:

if (Session["InfoMessages"] != null) 
{ 
    lblMessage.Text = (string)Session["InfoMessages"]; 
    Session["InfoMessages"] = null; 
} 

spero che aiutare gli altri :)

27

Come altri hanno già detto, puoi farlo usando lo History API nei browser moderni (IE10 +, FF4 +, Chrome5 +). Non c'era esempio completo nelle risposte, quindi pensato che mi piacerebbe condividere la mia soluzione, come ho appena avuto un obbligo di fare la stessa cosa:

history.pushState(null, "", location.href.split("?")[0]); 

Se si utilizza Modernizr, è anche possibile controllare se la Storia API è disponibile in questo modo:

if (Modernizr.history) { 
    history.pushState(null, "", location.href.split("?")[0]); 
} 
1

io uso questo codice snippit nei miei progetti personali in cui ho bisogno di rimuovere params URL senza ri-caricamento:

var newURL = location.href.split("?")[0]; 
window.history.pushState('object', document.title, newURL);