您可以在发送请求之前将 ListId/ItemId 附加到查询字符串并在服务器上定期读取它。
var url = 'http://example.com?param1=10¶m2=20#1000';
var beforeHash = url.split('#')[0];
var itemId= url.split('#')[1];
var processedUrl = beforeHash + '&itemId=' + itemId;
如果您的请求尚未从 JavaScript 触发,您将不得不挂钩链接的点击事件...
或者,也许您可以完全摆脱#
并通过 JavaScript 滚动内容(我的猜测是您使用#
本地锚点来跳转到文档中的不同位置)?
顺便说一句,window.location.hash
有财产。
更新:根据您的评论,流程如下:
- 用户使用 #ItemId 键入 URL
- 服务器返回页面
- JavaScript 从 window.location 读取 #ItemId,将其放入 QueryString 并发出请求
- 服务器根据修改后的 QueryString 返回页面
在这种情况下,两个请求模式似乎是唯一可行的选择。按照设计,服务器不会获得 #Item 部分(称为片段)。因此,在初始请求时无法猜测 ItemId。如果在第二次(ajax)请求之后,您通过JavaScirpt刷新页面的#ItemId依赖部分,用户体验不会受到太大影响。