JQuery удалить одну переменную URL - PullRequest
15 голосов
/ 19 августа 2011

Я занят созданием веб-приложения, которое должно обрабатывать много ошибок и прочего, поэтому я создал диалоговое окно jquery ui. Который показывает эти ошибки. Ошибки извлекаются базой данных. например:

когда мое имя пользователя / пароль неверны, когда я пытаюсь войти в систему, меня перенаправляют на

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

приложение узнает, что ему нужно найти ошибку базы данных в базе данных и показать ее пользователю. Теперь все идет очень хорошо. За исключением того, что, когда по какой-то причине пользователь перезагрузит эту конкретную страницу, он снова получит сообщение об ошибке, в то время как ему не нужно его получать.

поэтому я планирую связать какую-то функцию с событием close диалогового окна и перенаправить пользователя к той же ошибке страницы без параметра e в URL. Как я мог достичь этого. Я перепробовал все виды вещей. Но не смог заставить его работать.

Что я пробовал:

в основном пытался получить все возможные параметры и соединить их вместе, кроме параметра 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 ]

30 голосов
/ 19 августа 2011
location.href=location.href.replace(/&?e=([^&]$|[^&]*)/i, "");

Это удалит все экземпляры параметра e из строки запроса и обновит страницу.

3 голосов
/ 19 августа 2011

Один из способов сделать это:

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 = '';
});

Если у вас их много, я рекомендую jHuery hashchange-событие Бена Алмана или более полнофункциональный BBQ плагин которые значительно облегчают вашу жизнь при работе с хэшами.

1 голос
/ 02 января 2018
urlObject = new URL(url);
urlObject.searchParams.delete('myParameter');

Объект Url имеет атрибут searchParams с функцией delete.Это удалит myParameter из urlObject.Если вы хотите снова получить доступ к своему URL, просто:

url = urlObject.href;

Далее:

https://developer.mozilla.org/en-US/docs/Web/API/URLSearchParams/delete https://developer.mozilla.org/de/docs/Web/API/URL/searchParams

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...