【问题标题】:Modify Query String Without new HTTP Request在没有新 HTTP 请求的情况下修改查询字符串
【发布时间】:2011-12-16 15:51:26
【问题描述】:

是否可以在不实际提交新的 HTTP 请求的情况下操作查询字符串?

例如,我有一个页面允许用户对某些配置选项进行大量更改。当他们第一次访问该页面时,它将是以下 URL:

www.mysite.com/options

当他们点击页面上的某些元素、此处的链接或此处的单选按钮时,URL 将更改为:

www.mysite.com/options?xkj340834jadf

通过这种方式,用户可以复制 URL,然后转到同一页面并让配置与之前完全相同,但我不想在他们单击选项时提交新请求。

这是可以使用 javascript/jquery 实现的吗?

【问题讨论】:

  • 我认为 jquery addess 插件是你要找的
  • jquery BBQ 做到了这一点,但我不知道机制,所以只有评论。
  • 您可能会考虑使用哈希而不是查询字符串,这已经可以满足您的需求了。
  • how to change url in browser url box? 和许多其他问题的可能重复。
  • 您可以捕获onunload 事件并将其添加到那里。

标签: javascript jquery html


【解决方案1】:

我认为这是不可能的。

您最好的解决方案是在 URL 的末尾添加一个锚标记,然后 jquery 可以读取该标记以确定 HTTP 重定向。

我相信,当您为此目的使用 #! 时,Google 也会编制索引。

What's the shebang/hashbang (#!) in Facebook and new Twitter URLs for?

【讨论】:

    【解决方案2】:

    最好的解决方案是使用哈希。正如柯特所说,#!是您告诉 Google 这是一个网络应用的方式,但如果您不需要抓取,请不要担心。

    你可以使用这样的东西:

    var hash = location.hash; //or window.location.hash
    hash = hash.replace(/^.*#!/, ''); // strip #! from the values
    //do something with the values you got stored in `hash` var
    

    如果你需要其他的事情发生,比如每次hash变化,你做一些事情,你可以绑定'hashchange'事件。例如:

    为此,我使用 Ben Alman 的 jQuery hashchange event

    $(window).hashchange( function(){
        var hash = location.hash;
        hash = hash.replace(/^.*#!/, '');
    
        // do something with 'hash' everytime it changes
        // EXAMPLE:Set the page title based on the hash.
        document.title = 'The hash is '+hash+'.';
    
        return false; //this prevent browser from following the # after doing what you wanted
    });
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2010-09-26
      • 2018-03-11
      • 2018-10-26
      • 1970-01-01
      • 2011-11-07
      • 1970-01-01
      • 2017-11-02
      相关资源
      最近更新 更多