2011-08-19 49 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个以上的这些? –