2011-08-19 14 views
12

私はjerery UIダイアログボックスを作ったので、多くのerorrsとstuffを処理する必要があるWebアプリケーションの作成に忙しいです。これらのエラーを示しています。エラーはデータベースによって取り出されます。例えば:jQueryは1つのURL変数を削除します

私が

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

アプリケーションにリダイレクトしてログインしようとすると、自分のユーザー名/パスワードが間違っている、その後、彼はデータベースやショーでログイン-不適切なエラーを検索するために持って知っていますそれをユーザーに知らせる。これですべてがうまくいく。何らかの理由でユーザーがこの特定のページをリロードした場合を除いて、エラーメッセージを再度表示しますが、取得する必要はありません。

私の計画は、ダイアログボックスのcloseイベントに何らかの機能をバインドし、URLにeパラメータを付けずに同じページバグにユーザーをリダイレクトすることです。どのように私はこれを達成することができます。私はあらゆる種類のものを試しました。しかし、それを働かせることはできませんでした。私が試した何

はbassicly可能なすべてのパラメータを取得し、電子パラメータを除いて一緒にそれらをステッチしようとしました。そのような:

$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

'(location.search.length){ location.href = location.href.substring(0、location.href.indexOf( '?'))+ '?' +( '&' + location.search.substring substring(1))。replace(/&e =([^&] $ | [^&] *)/ i、 '')。 } ' –

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

これはかなりうまく動作しますが、ユーザーがインデックスページでエラーを受け取った場合はどうなりますか?そう、次のURLに。 'http://domain.com/?e = login-error'ダイアログボックスを閉じても、ユーザーはそのエラーで常にループします。 – sn0ep

+0

しかし、このwoukldは、これらのうち20個以上を手動で作成する必要があることを意味します。右? – sn0ep

+1

@Toby:ページはリロードされないので、ループはありません。そして、なぜこれらの20以上を作る必要がありますか? –

0
urlObject = new URL(url); 
urlObject.searchParams.delete('myParameter'); 

Urlオブジェクトには、削除機能を持つsearchParams属性があります。これにより、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