it-swarm.com.de

Wie füge ich der URL einen Parameter hinzu?

Meine aktuelle URL lautet: http://something.com/mobiles.php?brand=samsung

Wenn ein Benutzer auf einen Mindestpreisfilter klickt (z. B. 300), möchte ich, dass meine URL wird

http://something.com/mobiles.php?brand=samsung&priceMin=300

Mit anderen Worten, ich suche nach einer Javascript-Funktion, die der aktuellen URL einen bestimmten Parameter hinzufügt und die Webseite dann auf die neue URL umleitet.

Hinweis: Wenn keine Parameter festgelegt sind, sollte die Funktion ? anstelle von & hinzufügen.

wenn die aktuelle URL http://something.com/mobiles.php lautet, sollte die Seite an http://something.com/mobiles.php?priceMin=300 anstatt an http://something.com/mobiles.php&priceMin=300 weitergeleitet werden.

14
Sumit Gupta

versuchen Sie etwas davon, sollten Sie auch Fälle berücksichtigen, in denen Sie diesen Parameter bereits in der URL haben:

function addOrUpdateUrlParam(name, value)
{
  var href = window.location.href;
  var regex = new RegExp("[&\\?]" + name + "=");
  if(regex.test(href))
  {
    regex = new RegExp("([&\\?])" + name + "=\\d+");
    window.location.href = href.replace(regex, "$1" + name + "=" + value);
  }
  else
  {
    if(href.indexOf("?") > -1)
      window.location.href = href + "&" + name + "=" + value;
    else
      window.location.href = href + "?" + name + "=" + value;
  }
}

dann rufst du es wie in deinem Fall an:

addOrUpdateUrlParam('priceMin', 300);
16
petho

Eigentlich ist das völlig trivial, da sich das Javascript-Objekt bereits damit beschäftigt. Verkapseln Sie diesen Einzeiler einfach in eine Funktion, um ihn mit Links usw. wiederzuverwenden:

<script>
    function addParam(v) {
        window.location.search += '&' + v;
    }
</script>

<a href="javascript:addParam('priceMin=300');">add priceMin=300</a>

Es ist nicht notwendig, nach ? zu suchen, da dies bereits der search-Teil ist und Sie nur den Parameter hinzufügen müssen.

Wenn Sie nicht einmal von einer Funktion Gebrauch machen wollen, können Sie so schreiben:

<a href="javascript:location.search+='&priceMin=300';">add priceMin=300</a>

Beachten Sie, dass dies genau das tut, wonach Sie gefragt haben: Um diesen spezifischen Parameter hinzuzufügen. Es kann bereits Teil des search-Teils sein, da in einem URI mehr als ein und derselbe Parameter enthalten sein kann. Möglicherweise möchten Sie das in Ihrer Anwendung normalisieren, aber das ist ein anderes Feld. Ich würde die URL-Normalisierung in einer eigenen Funktion zentralisieren.

Bearbeiten:

In der Diskussion über die oben akzeptierte Antwort wurde klar, dass die folgenden Bedingungen erfüllt sein müssen, um eine funktionierende Funktion zu erhalten:

  • wenn der Parameter bereits vorhanden ist, sollte er geändert werden.
  • wenn der Parameter bereits mehrmals vorhanden ist, bleibt nur die geänderte Kopie erhalten.
  • wenn der Parameter bereits vorhanden ist, aber keinen Wert hat, sollte der Wert festgelegt werden.

Da search bereits die Suchzeichenfolge bereitstellt, müssen Sie nur noch diesen Abfrage-Info-Teil in die Name- und Wert-Paare einpassen, den fehlenden Namen und Wert ändern oder hinzufügen und ihn anschließend wieder in search hinzufügen:

<script>
    function setParam(name, value) {
        var l = window.location;

        /* build params */
        var params = {};        
        var x = /(?:\??)([^=&?]+)=?([^&?]*)/g;        
        var s = l.search;
        for(var r = x.exec(s); r; r = x.exec(s))
        {
            r[1] = decodeURIComponent(r[1]);
            if (!r[2]) r[2] = '%%';
            params[r[1]] = r[2];
        }

        /* set param */
        params[name] = encodeURIComponent(value);

        /* build search */
        var search = [];
        for(var i in params)
        {
            var p = encodeURIComponent(i);
            var v = params[i];
            if (v != '%%') p += '=' + v;
            search.Push(p);
        }
        search = search.join('&');

        /* execute search */
        l.search = search;
    }
</script>

<a href="javascript:setParam('priceMin', 300);">add priceMin=300</a>

Dies ist zumindest etwas robuster, da es mit URLs wie diesen umgehen kann:

test.html?a?b&c&test=foo&priceMin=300

Oder auch:

test.html?a?b&c&test=foo&pri%63eMin=300

Darüber hinaus werden der hinzugefügte Name und der Wert immer ordnungsgemäß codiert. Dies kann fehlschlagen, wenn ein Parametername zu einer unzulässigen Eigenschaft js führt.

15
hakre
if(location.search === "") {
    location.href = location.href + "?priceMin=300";
} else {
    location.href = location.href + "&priceMin=300";
}

Im Fall location.search === "" gibt es keinen ?-Teil.

Fügen Sie also ?newpart hinzu, damit es .php?newpart wird.

Ansonsten gibt es bereits einen ?-Teil.

Fügen Sie also &newpart hinzu, damit es .php?existingpart&newpart wird.


Dank hakre können Sie es auch einfach so einstellen:

location.search += "&newpart";

Falls erforderlich, wird automatisch ? hinzugefügt (wenn dies nicht offensichtlich ist, wird es ?&newpart auf diese Weise erstellt, aber das sollte keine Rolle spielen).

5
pimvdb

Ich schreibe die richtige Antwort in PHP um:

function addOrUpdateUrlParam($name, $value){
$href = $_SERVER['REQUEST_URI'];
$regex = '/[&\\?]' . $name . "=/";
if(preg_match($regex, $href)){
    $regex = '([&\\?])'.$name.'=\\d+';
    $link = preg_replace($regex, "$1" . $name . "=" . $value, $href);
}else{
    if(strpos($href, '?')!=false){
        $link = $href . "&" . $name . "=" . $value;
    }else{
        $link = $href . "?" . $name . "=" . $value;
    }
}
return $link;
}

Ich hoffe, dass jemand helfen kann ...

2
Leon Bauer
var applyMinPrice = function(minPrice) {
    var existingParams = (location.href.indexOf('?') !== -1),
        separator = existingParams ? '&' : '?',
        newParams = separator + 'priceMin=' + minPrice;

    location.href += newParams;
}
1
Martin

verwenden Sie var urlString = window.location, um die URL zu erhalten

prüfen Sie, ob die URL bereits ein '?' enthält. Mit urlString.indexOf('?') bedeutet -1, dass es nicht existiert.

stellen Sie window.location für die Weiterleitung ein

das ist wie 101 von Javascript. Probieren Sie einige Suchmaschinen aus!

0
zeal
<FORM action="" method="get">
<P>
<LABEL for="brand">Brand: </LABEL>
          <INPUT type="text" id="brand"><BR>
<LABEL for="priceMin">Minimum Price: </LABEL>
          <INPUT type="text" id="priceMin"><BR>
</P>

0
Sherif elKhatib
<html>
<body>
..
..
..

<?php
$priceMinValue= addslashes ( $_GET['priceMin']);
if (!empty($priceMin)) {
        $link = "currentpage.php?priceMin=". $priceMinValue;
        die("<script>location.href = '".$link. "'</script>");    
}
?>
</body>
</html>
0
Suresh

Wenn der Benutzer ein Textfeld mit einem Mindestpreis ausfüllen muss, lassen Sie das Formular nicht als GET-Anfrage mit einer leeren Aktion absenden. IIRC, das sollte genau das tun, was Sie wollen, ohne Javascript. 

0
bjelleklang