2017-07-17 24 views
2

私は、ページ設定を使用して結果リストを返すPHPサイトに検索結果ページを持っています。 URLは次のようになります。選択メニューからHTTP GETリクエストを変更する変更 - 更新パラメータ

$(document).ready(function() { 
 
    $('#productType').change(function() { 
 
    window.location.href = window.location.href + '&productType=' + $(this).val(); 
 
    }); 
 
});

この:

findProducts.php?action=searchAssets&orderNumber=xxxx&productName=zzz&skip=20 

は、私は、ユーザーが/変更このようなスクリプトをトリガし、検索結果をフィルタリングすることを可能にする選択メニューを持っています1つのことを除いてうまくいっています - 前回の検索のページ番号が有効でないか適用されないため、新しいフィルタ検索のために 'skip'パラメータを0にリセットする必要があります。

skip=20 

へ:

skip=0 

このスクリプトの一部として、私は変更することができます方法はありますか?

答えて

1

あなたがURLに置き換える正規表現を行うことができます。そうしないと、何度も何度もそれを追加しますので、あなたがでProductTypeと同じことを行う必要があります

window.location.href = window.location.href.replace(/((?:\?|&)skip)=\d+/, '$1=0') + '...'; 

(未テスト)

注意を。

より良い解決策はおそらくベースURLを持っているし、すべての必要なパラメータの代わりに、検索を実行を追加し、置き換えることであろう

...

1

あなたは?

を使用してURLを分割することにより、URLからクエリを取得することができます

これにより、最初のインデックスのベースURLと2番目のインデックスのベースURLが得られます。

&を使用してクエリを分割すると、クエリパラメータを取得できます。

skipパラメータであるかどうかをチェックするすべてのパラメータをループすることができます。パラメータがskipパラメータの場合は、新しい値を出力配列に送ります。それ以外の場合は、変更されていないパラメータを出力配列にプッシュします。

&を使用してすべての出力要素を結合するには、joinを使用して、クエリを再構築し、元のベースURLを新しいクエリ文字列で返します。

<script> 
 

 
function fixQuery(qstr) { 
 
    var parts = qstr.split('?'); 
 
    var query = parts[1]; 
 
    var a= query.split("&"); 
 
    var out=[]; 
 
    for (var i = 0; i < a.length; i++) { 
 
     
 
     var b = a[i].split('='); 
 
     if(decodeURIComponent(b[0])=="skip") 
 
     { 
 
      out.push("skip=0") 
 
     } 
 
     else { 
 
      out.push(a[i]); 
 
     } 
 
    } 
 
    return parts[0] + '?' + out.join("&"); 
 
} 
 
var result= fixQuery("http://example.com/findProducts.php?param1=test+thing&param2=hello&skip=10"); 
 
console.log(result) 
 
//http://example.com/findProducts.php??param1=test+thing&param2=hello&skip=0 
 
</script>

関連する問題