我正在忙着创建一个Web应用程序,它需要处理很多erorrs和东西,所以我做了一个jquery ui对话框。这显示了这些错误。数据库检索错误。例如:
当我尝试登录时,我的用户名/密码不正确,我被重定向到
http://domain.com/?do=login&e=login-incorrect
然后,应用程序知道他必须在数据库中搜索登录错误并向用户显示该错误。现在这一切都很顺利。除非由于某种原因用户将重新加载此特定页面,否则他再次收到错误消息,而他不需要获取它。
所以我的计划是将某种功能绑定到对话框的close
事件,并将用户重定向到同一页面错误,而不使用URL中的e参数。我怎么能实现这一点。我尝试了各种各样的东西。但无法让它发挥作用。
我尝试了什么:
贝司试图获得所有可能的参数并将这些参数拼接在一起,除了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 :(得分:29)
location.href=location.href.replace(/&?e=([^&]$|[^&]*)/i, "");
这将从查询字符串中删除e参数的所有实例并刷新页面。
答案 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 = '';
});
如果你有很多这样的话,我推荐Ben Alman的jQuery hashchange event或更全功能的BBQ plugin,这可以让你在使用哈希时更轻松。
答案 2 :(得分:1)
urlObject = new URL(url);
urlObject.searchParams.delete('myParameter');
Url对象具有searchParams属性,该属性具有delete功能。这将从urlObject中删除 myParameter 。如果您想再次访问您的网址,只需:
url = urlObject.href;
此外:
https://developer.mozilla.org/en-US/docs/Web/API/URLSearchParams/delete https://developer.mozilla.org/de/docs/Web/API/URL/searchParams