2011-08-19 16 views
12

Estoy ocupado haciendo una aplicación web, que necesita procesar una gran cantidad de errores y cosas así que hice un cuadro de diálogo jquery ui. Que muestra estos errores Los errores son recuperados por la base de datos. por ejemplo:jQuery eliminar una variable de URL

cuando mi nombre de usuario/contraseña es incorrecta cuando intento entrar me redirigen a

http://domain.com/?do=login&e=login-incorrect 

la aplicación a continuación, saber que tiene que buscar el error de inicio de sesión incorrecto en la base de datos y mostrar eso para el usuario. Ahora todo esto va muy bien. Excepto que cuando por alguna razón el usuario vuelva a cargar esta página en particular, recibirá nuevamente el mensaje de error mientras no necesite obtenerlo.

así que mi plan es vincular algún tipo de función al evento close del cuadro de diálogo y redirigir al usuario al mismo error de página sin el parámetro e en la URL. ¿Cómo podría lograr esto? Intenté todo tipo de cosas. Pero no pude hacer que funcione.

lo que he intentado:

bassicly intentado conseguir todos los parámetros posibles y costura junto a excepción de los que el parámetro e. de este modo:

$ERROR = $_GET['e']; 
$DO = $_GET['do']; 
$P = $_GET['p']; 
$C = $_GET['c']; 
$T = $_GET['t']; 
$ACTION = $_GET['action']; 

// URL WITHOUT ERRORS 
$needP = ""; 
$needACTION = ""; 
$needDO = ""; 
if($P != ""){ 
    $needP = "p=".$P."&"; 
} 
if($DO != ""){ 
    $needDO = "do=".$DO."&"; 
} 
if($ACTION != ""){ 
    $needACTION = "action=".$ACTION.""; 
} 
$NOERRORURL = $BASEURL."?".$needP.$needDO.$needACTION; 

Pero no funciona y su fea

+0

nos muestran lo que ha intentado. –

+0

publicación editada ... – sn0ep

Respuesta

25
location.href=location.href.replace(/&?e=([^&]$|[^&]*)/i, ""); 

Esto eliminará todas las instancias del parámetro e de la cadena de consulta y actualizará la página.

+0

¡Muchas gracias, esto es justo lo que necesitaba! ¡muchas gracias! – sn0ep

+0

'example.com? E = huevo & f = rana' ->' ejemplo.com? & F = rana'. El '? &' Es un poco loco. –

+0

'if (location.search.length) { location.href = location.href.substring (0, location.href.indexOf ('?')) + '?' + ('&' + Location.search.substring (1)). Replace (/ & e = ([^ &] $ | [^ &] *)/i, ''). Subserie (1); } ' –

3

Una forma de hacerlo:

location.search = location.search.replace(/&e=[^&;]*/,''); 

que se recargue la página como usted menciona, sin el parámetro 'e'


Sin embargo, un enfoque mucho mejor es utilizar un hash lugar, como este: http://domain.com/?do=login#login-incorrect. A continuación, puede comprobar el hash cuando se carga la página, y abrir el diálogo de error si el login-incorrect hash se encontró:

if (location.hash.indexOf('login-incorrect') != -1) { 
    // Open your jQuery UI dialog here 
} 

Y si se cierra el cuadro de diálogo, puede simplemente borrar el hash sin tener que actualizar la página :

$('.closeErrorDialog').click(function(){ 
    location.hash = ''; 
}); 

Si va a tener un montón de ellos, recomiendo de Ben Alman jQuery hashchange event o más con todas las funciones BBQ plugin que harán su vida mucho más fácil cuando se está trabajando con los hashes.

+0

Esto funciona bastante bien, pero ¿qué ocurre si el usuario obtiene un error en la página de índice? así que en la siguiente url. 'http: //domain.com/? e = login-error' el usuario se bucleará constantemente a través de ese error, incluso si cierra el cuadro de diálogo – sn0ep

+0

, pero esto significa que tengo que hacer más de 20 de estos manualmente. ¿derecho? – sn0ep

+1

@Toby: la página nunca se vuelve a cargar, por lo que no puede haber ningún bucle. ¿Y por qué necesitarías hacer más de 20 de estos? –

Cuestiones relacionadas