jQuery删除一个URL变量

时间:2011-08-19 19:38:12

标签: jquery url parameters

我正在忙着创建一个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;

但它不起作用,它的丑陋

3 个答案:

答案 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