2012-05-22 18 views
20

Tengo una URL con una cadena de consulta larga adjunta. Después de cargar la página, no necesito la cadena de consulta. Por lo tanto, quiero eliminar la cadena de consulta de la barra de direcciones sin una recarga de página.¿Cómo puedo eliminar la cadena de consulta de la url después de que se carga la página?

me trataron parent.location.hash = ''; y window.location.href = '/#'

Ellos no hacen la diferencia.

+0

hash es el que viene después de la '# '. cadena de consulta es la que está después del '?' pero antes del '#'. lo que estás haciendo no tiene sentido. ¿Por qué querrías esconderlo? – Joseph

+0

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

+0

prueba mi código si funciona ahora o no :) –

Respuesta

6

No puedes hacer eso sin volver a cargar la página, imagina si pudieras poner lo que quisieras en la barra de direcciones del navegador? divertido de seguridad :)

Aunque ahora puede hacerlo en HTML 5 (que sólo funcionará en los navegadores que lo apoyan) utilizando el nuevo history API, pero siendo realistas, sus mejores escenarios garantiza una reescritura en lugar de incluir que (parece mazo para romper una nuez).

Como dijiste, no necesitas la cadena de consulta después de cargar la página, debes publicar realmente, y luego redirigir a otra URL después de que hayas terminado tu procesamiento.

+7

Eso no es verdad. La [API de historial] (http://stackoverflow.com/a/10700997/19068) lo hace posible. Tiene algunos límites, el principal es que no puede cambiar la URL a una que aparece en un origen diferente, pero la pregunta no requiere que cambie de origen. – Quentin

+2

@Quentin Tienes razón, no puedo borrarlo (se acepta) así que he editado para incorporar eso. I + 1ed el tuyo también :) – mattytommo

16

Esto se puede lograr en modern browsers usando the history api, pero probablemente no sea la mejor solución a su problema.

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

Parece que sería mejor tratamiento de los datos y luego volver a dirigir a la página en lugar de devolver un documento HTML directamente.

Dado que no desea mantener la URL, no será útil para marcar, por lo que es muy probable que sea mejor que realice una solicitud POST.

Esto sugiere que debe utilizar el POST-Redirect-GET pattern.

+0

No puedo usar un POST porque son los datos de análisis que se pasan en la cadena de consulta – Sangam254

+0

No veo cómo sigue eso. Incluso si lo hace, aún puede redireccionar. – Quentin

+0

¡Eres un salvavidas! Gracias ... funciona como un encanto! – user1656204

2

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

misma sintaxis para pushState. Sin embargo, deberá encontrar la manera de que IE lo comprenda.

Una mejor manera sería utilizar el módulo Apache mod_rewrite. Es bastante fácil de usar.

+0

Pero mod_rewrite redirigirá a la url recortada antes de cargar la página – Sangam254

0

Puede evitar una cadena de consulta por completo utilizando POST en lugar de GET.

+0

No puedo usar una POST porque son los datos analíticos los que se pasan en la cadena de consulta – Sangam254

0

código actualizado Ahora va a trabajar

apenas añade continuación código en la página cuyo enlace que desea cambiar.

// 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); 
    }); 

No se olvide de añadir http://code.jquery.com/jquery-latest.js en su página

+0

Gracias por el código. Pero agrega un # 2 al final de la url (después de la cadena de consulta). Quise eliminar la cadena de consulta de la url después de que se carga la página. – Sangam254

0

me he enfrentado al mismo problema.Mi solución fue éstos: recibirá la petición de la siguiente manera:

operation.aspx?opr=lock 

Después de terminar la operación de redirección de esta manera:

Response.Redirect("operation.aspx"); 

En la respuesta, si no hay ningún mensaje, les imprime la siguiente manera:

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

espero que pueda ayudar a otros :)

27

Como han dicho otros, puede hacer esto usando el History API en los navegadores modernos (IE10 +, FF4 +, Chrome5 +). No había ningún ejemplo completo de las respuestas, por lo que pensé que podría compartir mi solución, ya que sólo tenía un requisito para hacer la misma cosa:

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

Si está utilizando Modernizr, también se puede comprobar si la historia API está disponible, así:

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

utilizo este código snippit en mis proyectos personales en las que necesito para eliminar params URL sin volver a la carga:

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