【问题标题】:jquery - build pretty url from parametersjquery - 从参数构建漂亮的 url
【发布时间】:2011-04-27 20:10:33
【问题描述】:

jQuery 有一个param() 函数,我正在寻找类似的功能。我需要在我的对象中返回一个 url。例如:

url: function() {
  return this.baseUrl + '?' + $.param({page: this.page, perPage: this.perPage});
},

这将返回example.com/?page=1&perPage=5 或类似形式的url。如何形成网址example.com/page/1/perpage/5

【问题讨论】:

    标签: jquery url uri clean-urls


    【解决方案1】:

    您可以创建自己的函数:

    function build(base, params) {
        for(var k in params) {
            if(params.hasOwnProperty(k)) {
                base += '/' + k + '/' + params[k];
            }
        }
        return base;
    }
    

    唯一的问题是不能保证参数的顺序(这对于查询字符串不是问题,但可能是这种 URL)。您可能还想添加检查 base 是否已经以斜线结尾。

    【讨论】:

      【解决方案2】:

      只是一个想法:)

      'example.com/?page=1&perPage=5'.replace(/[&=]/g,'/').replace('?','')
       .toLowerCase();
      

      【讨论】:

      • +1 有趣的想法。唯一的问题可能是问号是否是参数值的一部分。
      • 当然,但这就是仍然使用.param 的美妙之处——因为? 是URL 中的保留字符,它将被jquery 转义:document.write($.param({'blah': 'lol?hi' }));
      • 有趣。因为实际上在查询字符串中,? 不必转义(afaik)。但很高兴知道 jQuery 确实逃脱了它。谢谢:)
      • @Felix 确实,URL 对保留字符非常宽容,但 jQuery 正确地遵循了这里的书籍;第 7 页,2.2。保留字符:ietf.org/rfc/rfc2396.txt
      【解决方案3】:

      把这个放在最后:

      replace(/[&=]/g,'/').replace('?','')
      

      像这样:

      url: function() {
        return (this.baseUrl + '?' + $.param({page: this.page, perPage: this.perPage})).replace(/[&=]/g,'/').replace('?','');
      },
      

      编辑指出关于 Felix Kling 对 ? 的担忧: 这只会删除 FIRST ?保留作为查询字符串 INTACT 一部分的任何其他?完全安全使用。

      【讨论】:

      • 对。我忘记了 JavaScript 的行为(对我来说)很奇怪,关于替换字符......感谢您再次指出!
      猜你喜欢
      • 1970-01-01
      • 2015-07-28
      • 2011-01-22
      • 2017-04-16
      • 2013-05-25
      • 2016-02-17
      • 2015-01-15
      • 2011-03-12
      • 2021-03-15
      相关资源
      最近更新 更多