私はwebアプリケーションの作成で忙しいので、多くのエラーを処理する必要があるため、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;
しかし、それは機能せず、醜い
location.href=location.href.replace(/&?e=([^&]$|[^&]*)/i, "");
これにより、クエリ文字列からeパラメータのすべてのインスタンスが削除され、ページが更新されます。
それを行う1つの方法:
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プラグイン をお勧めします。ハッシュを操作します。
urlObject = new URL(url);
urlObject.searchParams.delete('myParameter');
Urlオブジェクトには、関数deleteを持つsearchParams属性があります。これにより、urlObjectからmyParameterが削除されます。もう一度URLにアクセスする場合は、次のようにします。
url = urlObject.href;
さらに:
https://developer.mozilla.org/en-US/docs/Web/API/URLSearchParams/deletehttps://developer.mozilla.org/de/docs/Web/ API/URL/searchParams