2012-11-30 17 views
5

私たちはウェブアプリケーションの開発に取り組んできましたが、完成したばかりですが、私たちを悩ますことはありません。(生産を止めることは決してありません)変数をURLに渡して隠す

ページの1つ(index.html)を呼び出すときに、URLに変数(searchid)を渡す必要があることがあります。したがって、http://domain.com/index.html?searchid=stringのようなページが表示されます。

?searchid=stringを表示したくないのが理想的ですが、私はそれをどうやって行うのかは分かりません。

私のグループはindex.htmlページを所有していませんが、私たちはどのグループに協力しているのでしょうか。.htaccessなどのようなものでどれくらいのことができるのか分かりません。

私は変数を入力してPOSTと考えていましたが、HTMLとjQueryで受け取る方法はわかりません。私のグループの他の人は、ページが読み込まれた後、URLからそれを削除することができると思っていましたが、とにかくデータを失うようなページリフレッシュが必要であると想定しています。

私は問題がXで、Yについて質問しているので、変数をURLから削除する正しい方法は何ですか?

+0

私が理解していないのは、URLからクエリ文字列を削除する理由です。クエリ文字列がもはや関係しないようにページの内容が変化していますか? – zzzzBov

+1

'。htaccess'を実行すると、http:// domain.com/searchfor/string'のように変えることができるURLをあらかじめ確認することができます。それで十分だろうか? 'string'を完全に取り除こうと思っているのであれば、POSTする必要はありません。また、html/jsからPOSTデータを読み取ることはできません。サーバ側からのみ行います。 – bfavaretto

+0

あなたは穏やかなアプリケーションを作っているのはなぜですか? – epascarello

答えて

2

ご質問は、ターゲットページではないとが一部のサーバーサイドスクリプトによって電力が供給されないことを示すためにです。そのような場合、私はページの読み込みをトリガーすることなく、直接編集可能であるという利点を持っているハッシュへのクエリ文字列を変更することをお勧めしたい:

http://yourdomain.com/page.html#search=value

<script type='text/javascript'> 
    // grab the raw "querystring" 
    var query = document.location.hash.substring(1); 

    // immediately change the hash 
    document.location.hash = ''; 

    // parse it in some reasonable manner ... 
    var params = {}; 
    var parts = query.split(/&/); 
    for (var i in parts) { 
    var t = part[i].split(/=/); 
    params[decodeURIComponent(t[0])] = decodeURIComponent(t[1]); 
    } 

    // and do whatever you need to with the parsed params 
    doSearch(params.search); 
</script> 

けれども、それは次のようになりますより良いここにいくつかのサーバー側スクリプトが含まれています。

+0

これは実装が最も簡単で、他のグループにコードを渡すようです。 – Rob

0

JavaScriptの履歴APIを使用してURLを書き換えることは可能です。 History.jsはこれを非常にうまく処理するライブラリです。

現在のクエリ文字列を無関係にするためにページの内容を動的に変更しない限り、URLからクエリ文字列を削除する必要はないと言われています。

+0

我々は、一般的にそれは大きな醜いです。 – Rob

6

あなたは歴史のAPIを使用することができますが、それは

詳しい情報はこちらのページをリロードせずに、あなたのURLは/index.htmlがのように見えるようになります最新のブラウザ

history.replaceState({}, null, "/index.html"); 

を必要としない:

Manipulated the browser history

+0

これは良い解決策ですが、この変更を実装するにはもっと多くの作業が必要になります。 Upvote! – Rob

+0

これははるかに良い答えですが、おそらく、特定のパラメータを隠す方法(例えば 'http://example.com/index.html?search = cats&utm_source = app')を含めるべきですユーザーはリンクを共有したり、ブックマークを付けたりできるように、検索を含める必要があります。 –

0

あなたは、サーバーがページ内のポストされたデータ、例えば含ませ、その後、データを投稿することができます:

echo "<script> post_data = ".json_encode($_POST)." </script>"; 

これはクロスブラウザで動作します。

関連する問題