2017-07-17 1 views
2

Ich habe eine Suchergebnisseite in einer PHP-Site, die eine Ergebnisliste mit Paginierung zurückgibt. Die URL sieht wie folgt aus:HTTP-GET-Anforderung über Menü ändern ändern - Parameter aktualisieren

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

ich ein Auswahlmenü haben, dass der Benutzer die Suchergebnisse ändern/filtern können, die ein Skript wie folgt ausgelöst:

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

Diese funktioniert gut bis auf eine Sache - Ich muss den Parameter 'skip' für die neue Filtersuche auf 0 zurücksetzen, da die Paginierungswerte der vorherigen Suche nicht gültig oder anwendbar sind. Gibt es eine Weise, die ich ändern kann:

skip=20 

zu:

skip=0 

als Teil dieses Skript?

Antwort

1

Sie könnten ein RegExp ersetzen auf die URL tun:

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

(ungetestet)

Beachten Sie, dass Sie das gleiche mit dem product tun sollten, denn sonst werde fügen Sie es wieder und wieder.

bessere Lösung wäre möglicherweise sein, um eine Basis-URL haben und dann alle notwendigen Parameter hinzufügen, anstatt die Suche nach tun und ersetzen ...

1

Sie können die Abfrage aus der URL erhalten, indem Sie die URL ?

mit Aufspalten

Dies gibt Ihnen die Basis-URL im ersten Index und die Abfrage im zweiten.

Sie können die Abfrageparameter dann abrufen, indem Sie die Abfrage unter Verwendung von & aufteilen.

Sie können alle Parameter durchlaufen, um zu überprüfen, ob es sich um den Parameter skip handelt. Wenn der Parameter der Skip-Parameter ist, drücken Sie den neuen Wert auf ein Ausgabe-Array. Andernfalls drücken Sie den unveränderten Parameter auf ein Ausgabearray.

Sie können dann join verwenden, um alle Ausgabeelemente mit & zu verknüpfen, um die Abfrage zu rekonstruieren und die ursprüngliche Basis-URL mit Ihrer neuen Abfragezeichenfolge zurückzugeben.

<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>