如何在URL中添加参数?

时间:2011-08-01 13:29:28

标签: php javascript url web-applications

我当前的网址是:http://something.com/mobiles.php?brand=samsung

现在,当用户点击最低价格过滤器(例如300)时,我希望我的网址变为

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

换句话说,我正在寻找一个javascript函数,它将在当前URL中添加指定的参数,然后将网页重定向到新的URL。

注意:如果没有设置参数,那么该函数应该添加?而不是&

即。如果当前网址为http://something.com/mobiles.php,则应将网页重定向到http://something.com/mobiles.php?priceMin=300 而不是http://something.com/mobiles.php&priceMin=300

9 个答案:

答案 0 :(得分:16)

尝试这样的事情,它也应该考虑你已经在url中使用那个参数的情况:

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

然后你就像你的情况一样调用它:

addOrUpdateUrlParam('priceMin', 300);

答案 1 :(得分:15)

实际上这完全是微不足道的,因为javascript位置对象已经处理了这个问题。只需将此单行封装到一个函数中,即可通过链接等重复使用它:

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

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

无需检查?,因为这已经是search部分,您只需要添加参数。

如果您不想使用某个功能,可以这样写:

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

请记住,这完全符合您的要求:添加该特定参数。它已经可以成为search部分的一部分,因为您可以在URI中多次使用相同的参数。您可能希望在应用程序中对其进行规范化,但这是另一个字段。我会将URL规范化集​​中到它自己的函数中。

修改

在讨论上面接受的答案时,很明显,应该满足以下条件才能获得有效的工作:

  • 如果参数已存在,则应更改。
  • 如果参数已多次存在,则只有更改后的副本才能存在。
  • 如果参数已存在但没有值,则应设置该值。

由于search已经提供了搜索字符串,唯一要做的就是将查询信息部分解析为名称和值对,更改或添加缺少的名称和值,然后将其添加回search

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

这至少有点健壮,因为它可以处理这些URL:

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

甚至:

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

此外,添加的名称和值始终正确编码。如果参数名称导致非法属性js label。

,则可能失败的地方

答案 2 :(得分:5)

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

如果location.search === "",则没有?部分。

添加?newpart,使其变为.php?newpart

否则已有?部分。

添加&newpart,使其变为.php?existingpart&newpart


感谢hakre,你也可以简单地设置它:

location.search += "&newpart";

如果有必要,它会自动添加?(如果不明显的话,它会以?&newpart的方式进行,但这不重要。)

答案 3 :(得分:2)

我在PHP中重写正确的答案:

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

我希望帮助某人......

答案 4 :(得分:1)

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

    location.href += newParams;
}

答案 5 :(得分:0)

如果您让用户以最低价格填写文本字段,为什么不让表单作为GET请求提交并执行空白操作? IIRC,这应该做你想要的,没有任何JavaScript。

答案 6 :(得分:0)

使用var urlString = window.location获取网址

检查网址是否已包含'?'使用urlString.indexOf('?'),-1表示它不存在。

window.location设置为重定向

这就像是javascript的101。尝试一些搜索引擎!

答案 7 :(得分:0)

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

答案 8 :(得分:0)

<html>
<body>
..
..
..

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