2017-07-17 93 views
2

我在PHP站點中有一個搜索結果頁面,它使用分頁返回結果列表。該URL看起來是這樣的:通過選擇菜單更改HTTP GET請求更改 - 更新參數

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

我有一個選擇菜單,允許用戶修改/過濾觸發這樣一個腳本的搜索結果:

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

這除了一件事以外,我的工作很好 - 我需要將新的過濾器搜索的「skip」參數重置爲0,因爲上一次搜索的分頁值無效或不適用。有沒有一種方法我可以改變:

skip=20 

到:

skip=0 

爲這個腳本的一部分?

回答

1

你可以做一個正則表達式的URL替代:

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

(未經測試)

請注意,您應該做同樣與productType,否則你會一次又一次地添加它。

更好的解決辦法可能是有一個基礎URL,然後添加所有必要的參數,而不是做搜索和替換...

1

您可以通過拆分使用?

的URL獲得來自URL查詢

這將爲您提供第一個索引中的基礎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>