2012-05-22 16 views
20

URLに長いクエリ文字列が付いています。 ページが読み込まれた後、私はクエリ文字列を必要としません。だから私は、ページのリロードなしでアドレスバーからクエリ文字列を削除したい。ページが読み込まれた後にURLからクエリ文字列を削除するにはどうすればよいですか?

私は、彼らは違いはありませんでしたparent.location.hash = '';window.location.href = '/#'

を試してみました。

+0

ハッシュは '#の後に来るものです'。クエリ文字列は '?'の後で、 '#'の前にある文字列です。あなたがしていることは意味をなさない。なぜあなたはそれを隠したいと思いますか? – Joseph

+0

http://stackoverflow.com/questions/136458/change-the-url-in-the-browser-without-loading-the-new-page-using-javascript – shareef

+0

現在動作しているかどうかをテストしてください:) –

答えて

6

あなたはブラウザのアドレスバーにあなたが望むものを置くことができたら、ページをリロードすることなくそれを行うことはできませんか?セキュリティ楽しい:)

あなたは今、新しいhistory APIを使用して(それだけをサポートしているブラウザで動作します)HTML5でそれを行うことができますが、しかし、現実的に、あなたのシナリオ最高のワラント書き換えの代わりにハンマーがいるようだ(という含みますナットを割る)。

ページが読み込まれた後でクエリ文字列を入力する必要がないと言われたように、は本当にとなり、処理が完了したら別のURLにリダイレクトされます。

+7

それは本当ではありません。 [history API](http://stackoverflow.com/a/10700997/19068)は可能にします。それにはいくつかの制限があります。主なものは、異なる原点に現れるURLにURLを変更することはできませんが、質問には原点を切り替える必要はありません。 – Quentin

+2

@Quentinあなたが正しいです、私はそれを削除することはできません(それは受け入れられる)ので、私はそれを組み込むように編集しました。私はあなたも+1しました:) – mattytommo

16

これはmodern browsersで達成可能ですが、the history apiを使用していますが、おそらくあなたの問題に対する最良の解決策ではありません。

history.replaceState({}, 'some title', '/'); 

HTMLドキュメントを直接返すのではなく、データを処理してからホームページにリダイレクトするほうが良いと思います。

URLを保持したくないので、ブックマークには便利ではないので、POSTリクエストを行うほうがよいでしょう。

これはPOST-Redirect-GET patternを使用する必要があることを示しています。

+0

クエリ文字列で渡されている解析データであるためPOSTを使用できません – Sangam254

+0

これはどのように続くのでしょうか。それでも、リダイレクトすることはできます。 – Quentin

+0

あなたは命を救う人です!おかげさま...魅力のように働きます! – user1656204

2

使用pushStateためhistory.replaceState({}, "Title", "page.html");

同じ構文。しかし、あなたはそれをIEに理解させる方法を見つけなければならないでしょう。

より良い方法は、Apache mod_rewriteモジュールを使用することです。それは非常に使いやすいです。

+0

mod_rewriteはページがロードされる前にトリムされたURLにリダイレクトされます – Sangam254

0

GETの代わりにPOSTを使用すると、クエリ文字列をすべて避けることができます。

+0

クエリ文字列で渡される解析データであるためPOSTを使用できません – Sangam254

0

は、今では

ちょうどそのリンクを変更したいあなたのページ内のコードの下に追加動作しますコードを更新しました。

// javascript function 

    function buildLin(first) { 
    var firs = first.toString() 
     //alert(firs); 
     //document.getElementById("team").value = "1"; 
      document.location.hash = "#" + firs.replace(/ /g, "_"); 
     //alert(document.location.hash); 
    } 

//jQuery to call above function after page loads 

    $(document).ready(function() { 
     buildLin(2); 
    }); 

は、私は同じ問題に直面しているあなたのページに

+0

ありがとうございます。しかし、urlの最後に#2が追加されます(クエリ文字列の後)。私は、ページが読み込まれた後、URLからクエリ文字列を削除したかったのです。 – Sangam254

0

http://code.jquery.com/jquery-latest.js を追加することを忘れないでください。私のソリューションは、これらのだった: このような要求を取得:すべてのメッセージがある場合、私はこのようにそれらを印刷し、応答で

Response.Redirect("operation.aspx"); 

:操作を終えた後

operation.aspx?opr=lock 

を次のようにリダイレクトします。

if (Session["InfoMessages"] != null) 
{ 
    lblMessage.Text = (string)Session["InfoMessages"]; 
    Session["InfoMessages"] = null; 
} 

私はそれが他人を助けることを願っています:)

27

他の人の話によると、現代のブラウザ(IE10 +、FF4 +、Chrome5 +)ではHistory APIを使用してこれを行うことができます。解答には完全な例がありませんでしたので、私はちょうど同じことを行うための要件だったように私は、私の解決策を共有したいと考え出し:あなたはModernizrを使用している場合

history.pushState(null, "", location.href.split("?")[0]); 

を、あなたも歴史かどうかを確認することができますAPIは非常に似提供されています:

if (Modernizr.history) { 
    history.pushState(null, "", location.href.split("?")[0]); 
} 
1

私は私が再ロードせずにURL paramsはを削除する必要が私の個人的なプロジェクトでは、このコードsnippitを使用します。

var newURL = location.href.split("?")[0]; 
window.history.pushState('object', document.title, newURL); 
関連する問題