AJAX唯一的URL

时间:2011-03-10 00:56:18

标签: javascript ajax facebook url

  

可能重复:
  How does facebook rewrite the source URL of a page in the browser address bar?

也许这是一个愚蠢的问题,如果这是一个简单的问题,我道歉,但我不确定我是否正确的术语是正确的,所以我无法找到谷歌的任何结果。

我正在寻找使用AJAX更改/修改当前页面的URL(或者特别是它的GET变量)。我认为这根本不可能,但似乎是在Facebook上完成的。

例如,当我在我的Facebook个人资料中时,会写下网址:
http://www.facebook.com/profile.php?id=xxxxx&sk=wall

然后,如果我点击我的个人资料图片下面的信息链接,它将变为:
http://www.facebook.com/profile.php?id=xxxxx&sk=info

并且没有页面刷新(据我所见)。

那么交易是什么,这是怎么做到的?

2 个答案:

答案 0 :(得分:0)

AFAIK除了添加主题标签锚之外,您无法在不刷新的情况下更改URL。您可以使用location.replace方法:

http://www.w3schools.com/jsref/met_loc_replace.asp

更新以反映@Crescent Fresh的链接

看起来HTML 5的history.pushState()还有另一个选项(目前仅由Webkit支持):

How does facebook rewrite the source URL of a page in the browser address bar?

答案 1 :(得分:0)

如果没有新请求,则无法修改页面URL查询字符串,但其“fragment identifier”(#之后的部分)可以使用javascript(因此为Ajax)。

您甚至可以使用ScriptManager的EnableHistory属性来利用它。

<asp:ScriptManager ID="ScriptManager1" runat="server" EnableHistory="true" onnavigate="ScriptManager1_Navigate" />

protected void Button_Click(object sender, EventArgs e)
{
   //Do something.
   // ...

   //Then "remember the state".
   ScriptManager1.AddHistoryPoint("SomeState", "SomeStateValue"); 
}

protected void ScriptManager1_Navigate(object sender, HistoryEventArgs e)
{
  //Get the state back.
  String statevalue = e.State["SomeState"];
  // ...
}