javascript - 如何解决URL中重复参数的问题

标签 javascript jquery html ajax url

我有一个 Ajax 选择输入,更改 URL 时,页面不会刷新。但是,当多次更改选择输入时,重复的参数会堆叠在 URL 中:

[domain]/find.php?cat=1#pricemin=10&pricemax=500#pricemin=10&pricemax=500

如何使用 javascript 将其编码回:

[domain]/find.php?cat=1#pricemin=10&pricemax=500

这样就不会出现重复的参数?

我当前的 jQuery 示例如下:

$('#filterform select').on('change', function(e){
        var dummy = $('#filterform').serialize(),
            loc = $('<a>', {href:window.location})[0];

        someajaxfunction();//do ajax function here
        if(history.pushState){
            history.pushState(null, null, loc +'#'+ dummy);
        }
    });

我尝试用loc.pathname替换loc,重复参数问题得到解决。但是我的 ?cat=1 表单参数也消失了,这是不希望的。我希望用 URL 搜索和修改 jQuery/javascript 方法来解决这个问题,例如:

我们拥有的是

[domain]/find.php?cat=1&subcats%5B%5D=1&subcats%5B%5D=2

我们想要的是

[domain]/find.php?cat=1&subcats=1+2

可能吗?

注意:发布此问题 5 分钟后,我意识到使用 loc.pathname + loc.search 解决了我的问题,抱歉发了这么长的帖子。我仍然对 URL 搜索和修改 jQuery/javascript 方法感到好奇。如果有人能提供一个起点,我将不胜感激,谢谢!

最佳答案

function removeDuplicate(url) {
  url = decodeURIComponent(url);                  // decode the url, %5B becomes [ and ,%5D becomes ]. Hence the url becomes  [domain]/find.php?cat=1&subcats[]=1&subcats[]=2
  var query = url.split('?')[1];                  // get only the query
  var parts = query.split('&');                   // split the query into parts: cat=1, subcats[]=1, subcats[]=2
  var params = {};
  for (var i = 0; i < parts.length; i++) {
    var nv = parts[i].split('=');
    if (!nv[0]) continue;
    var value = nv[1] || true;
    if (params[nv[0]] && params[nv[0]].indexOf(value)) {
      params[nv[0]].push(value);
    } else {
      params[nv[0]] = [value];
    }
  }

  url = url.split('?')[0] + '?';
  var keys = Object.keys(params);
  for (var i = 0; i < keys.length; i++) {
    url += keys[i] + '=' + params[keys[i]].join('+');

    if (i !== keys.length - 1) url += '&';
  }
  return url;
}

关于javascript - 如何解决URL中重复参数的问题,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/41338177/

相关文章:

html - YouTube Iframe API:无法在IOS上自动播放

javascript - 是否可以反转 SVG 的裁剪?

javascript - 在 QuillJS 中添加自定义类到 blockquote

Javascript 性能 this.与 varname 相比。用于访问属性

javascript - 视差内容 slider 自动播放不起作用

javascript:阻止第二个_blank窗口在浏览器中打开?

javascript - div 左右两侧的 float 按钮

javascript - DTM : _satellite not defined

jquery - 苹果网络应用程序状态栏检测纵向或横向不工作

javascript - 在ajax调用中访问函数外部变量的问题