2011-08-19 50 views
12

我正在忙於製作一個Web應用程序,它需要處理大量的erorrs和東西,所以我做了一個jQuery UI對話框。其中顯示了這些錯誤。錯誤由數據庫檢索。例如:jQuery刪除一個URL變量

,當我的用戶名/密碼不正確,當我嘗試登錄我重定向到

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

的應用程序,然後知道他有來搜索數據庫並顯示登錄,不正確的錯誤那對用戶。現在這一切都很順利。除了由於某種原因,用戶會重新加載這個特定的頁面時,他再次得到錯誤消息,而他不需要獲取它。

所以我的計劃是將某種功能綁定到對話框的close事件並將用戶重定向到相同的頁面錯誤,而不在URL中使用e參數。我怎麼能做到這一點。我嘗試了各種各樣的東西。但無法實現它的工作。

我的嘗試:

bassicly試圖獲得所有可能的參數和拼接在一起的那些除了e參數。像這樣:

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

但它不工作,它的醜陋

+0

向我們展示你嘗試過什麼。 –

+0

編輯後... – sn0ep

回答

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

這將從查詢字符串中刪除e參數的所有實例並刷新頁面。

+0

非常感謝,這正是我需要的!非常感謝你! – sn0ep

+0

'example.com?e = egg&f = frog' - >'example.com?&f = frog'。 '?&'有點亂。 –

+0

'if(location.search.length){location.search.length} location.href = location.href.substring(0,location.href.indexOf('?'))+'?'+('&'+ location.search.substring (1))代替(/&E =([^&] $ | [^&] *)/ I, '')子串(1)。 }' –

3

一種方式做到這一點:

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

像你提到的,這將刷新頁面,而這個「e」參數


然而,更好的方法是使用哈希代替,就像這樣:http://domain.com/?do=login#login-incorrect。然後,你可以檢查在頁面加載時散,如果login-incorrect散列找到打開你的錯誤對話框:

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

如果他們關閉對話框,你可以簡單地清除散,而無需刷新頁面:

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

如果你將有很多的這些,我建議本Alman的jQuery hashchange event或功能更全面的BBQ plugin,使您的生活輕鬆了許多,當你使用哈希工作。

+0

這個工作非常整潔,但如果用戶在索引頁面上出現錯誤會怎麼樣?所以在下面的網址。 'http://domain.com/?e =登錄錯誤',即使用戶關閉對話框,用戶也會不斷循環通過該錯誤 – sn0ep

+0

但是這個woukld意味着我必須手動完成20個以上的這些操作。對? – sn0ep

+1

@Toby:頁面從不重載,所以不能有任何循環。爲什麼你需要製作20個以上的這些? –