各ページに 10 個の製品を表示する製品ページがあります。
GET
変数は結果の&perpage=10
量を変更します。<select>
さまざまな量の結果を選択するドロップダウンを作成しました。
この選択ボックスが変更されるたびに、現在のURL&perpage=NEWVALUE
に追加する必要があります。
どうすればこれを達成できますか?
各ページに 10 個の製品を表示する製品ページがあります。
GET
変数は結果の&perpage=10
量を変更します。<select>
さまざまな量の結果を選択するドロップダウンを作成しました。
この選択ボックスが変更されるたびに、現在のURL&perpage=NEWVALUE
に追加する必要があります。
どうすればこれを達成できますか?
現在の URLを変更する唯一の方法は、ハッシュタグ ( #
) とwindow.history.replaceState
を使用することです。どちらも実際にはページをリロードしません。これらのメソッドは、リッスンできる変更イベントをディスパッチし、ajax を使用してバックエンド スクリプトを再クエリして結果を取得しますが、これは実際に必要なものよりも少し多い場合があります。
おそらくやりたいことは、(選択メニューを使用して) フォームを現在のページに再送信することです。何かのようなもの:
<form action="" method="GET">
<select name="perpage" onchange="this.form.submit()">
<option value="10">10</option>
<option value="25">25</option>
<option value="50">50</option>
</select>
</form>
サーバー側でこれを行う方法を尋ねていると仮定すると(質問には記載されていません)、必要なことを行う1つの方法を次に示します。
$parts = parse_url($url); # parse the URL into its component parts
if (isset($parts['query'])) {
parse_str($parts['query'], $qs); # split query string into parts
} else {
$qs = array();
}
$qs['perpage'] = $NEWVALUE; # add param to array
$parts['query'] = http_build_query($qs); # build query string from array
# then, using `unparse_url()` from
# http://www.php.net/manual/en/function.parse-url.php#106731
# you rebuild the URL:
$url = unparse_url($parts);
# For reference, here's `unparse_url()`:
function unparse_url($parsed_url) {
$scheme = isset($parsed_url['scheme']) ? $parsed_url['scheme'] . '://' : '';
$host = isset($parsed_url['host']) ? $parsed_url['host'] : '';
$port = isset($parsed_url['port']) ? ':' . $parsed_url['port'] : '';
$user = isset($parsed_url['user']) ? $parsed_url['user'] : '';
$pass = isset($parsed_url['pass']) ? ':' . $parsed_url['pass'] : '';
$pass = ($user || $pass) ? "$pass@" : '';
$path = isset($parsed_url['path']) ? $parsed_url['path'] : '';
$query = isset($parsed_url['query']) ? '?' . $parsed_url['query'] : '';
$fragment = isset($parsed_url['fragment']) ? '#' . $parsed_url['fragment'] : '';
return "$scheme$user$pass$host$port$path$query$fragment";
}
http://www.php.net/manual/en/function.parse-url.php#106731を参照してください。
まあ、 (値からlocation.href += "&perpage="+newvalue
適切に定義された)だけでうまくいきますが、しばらくすると次のようなものが得られますnewvalue
<select>
http://example.com/products.php?perpage=10&perpage=20&perpage=50&perpage=10&perpage=5&perpage=20&................
したがって、次のようなことを実際に行う必要があります。
location.href = location.href.replace(/([?&])perpage=\d+/,"$1perpage="+newvalue);
window.location.href="?perpage=NEWVALUE"
これにより、クエリ文字列が現在の場所に追加され、ウィンドウがそこに移動します
PHP、JavaScript では?
<form method="get">
<select name="perpage">
<option value="10">10</option>
<option value="20">20</option>
<option value="30">30</option>
</select>
</form>
このGET
メソッドを使用すると、perpage
値が URL に送信され、ページがリロードされます (action="someurl"
別のページに移動する場合は設定してください)。
ページをリロードせずに説明したように URL を変更することはできません。(ページをリロードしたくない場合)
jquery: リダイレクトせずに URL アドレスを変更しますか?を参照してください。より完全な説明と、ハッシュで同様のことを行う方法については。