2011-08-19 14 views
12

Jestem zajęty tworzeniem aplikacji internetowej, która musi przetworzyć wiele erorrs i rzeczy, więc zrobiłem okno dialogowe jquery ui. Który pokazuje te błędy. Błędy są pobierane przez bazę danych. na przykład:jQuery usunąć jedną zmienną URL

gdy moja nazwa użytkownika/hasło jest nieprawidłowe, gdy próbuję się zalogować i przekierowanie do

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

Następnie aplikacja wie, że musi szukać błędu logowania-nieprawidłowe w bazie danych i koncert to dla użytkownika. Teraz wszystko idzie bardzo dobrze. Tyle tylko, że gdy z jakiegoś powodu użytkownik przeładuje tę konkretną stronę, ponownie otrzyma komunikat o błędzie, podczas gdy on nie musi go pobierać.

więc moim planem jest powiązanie jakiejś funkcji z wydarzeniem close okna dialogowego i przekierowanie użytkownika do tego samego błędu strony bez parametru e w adresie URL. Jak mogłem to osiągnąć. Próbowałem różnych rzeczy. Ale nie mogłem go uruchomić.

Co próbowałem:

bassicly starał się wszystkie możliwe parametry i szycie razem z wyjątkiem tych, dla parametru e. tak:

$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; 

Ale to nie działa, a jego brzydki

+0

Pokaż nam co próbowałem. –

+0

edytowany wpis ... – sn0ep

Odpowiedz

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

Spowoduje to usunięcie wszystkich wystąpień parametru e z ciągu zapytania i odświeżenie strony.

+0

Wielkie dzięki, to jest właśnie to, czego potrzebowałem! Dziękuję Ci bardzo! – sn0ep

+0

'example.com? E = jajko & f = żaba' ->' example.com? & F = żaba'. '? &' Jest trochę walnięty. –

+0

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

3

Jednym ze sposobów, aby to zrobić:

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

To spowoduje przeładowanie strony jak wspomniałeś, bez parametru „E”


jednak dużo lepszym rozwiązaniem jest użycie skrótu zamiast, jak to: http://domain.com/?do=login#login-incorrect. Następnie można sprawdzić hash podczas wczytywania strony i otworzyć okno dialogowe błędu jeśli login-incorrect hash znaleziono:

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

A jeśli zamknąć okno, można po prostu usunąć skrótu bez konieczności odświeżania strony :

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

Jeśli masz zamiar mieć wiele z nich, polecam Ben Alman na jQuery hashchange event lub bardziej pełni funkcjonalny BBQ plugin które czynią życie o wiele łatwiejsze, gdy pracuje się z mieszań.

+0

To działa całkiem nieźle, ale co, jeśli użytkownik dostanie błąd na stronie indeksu? więc pod następującym adresem URL. 'http: //domena.com/? e = login-error' użytkownik będzie ciągle przechodzić przez ten błąd, nawet jeśli zamknie okno dialogowe. – sn0ep

+0

Ale to oznacza, że ​​muszę zrobić ponad 20 z nich ręcznie. dobrze? – sn0ep

+1

@Toby: strona nigdy nie jest ponownie ładowana, więc nie może być żadnej pętli. I dlaczego musiałbyś zrobić ponad 20 z nich? –

Powiązane problemy