当前位置: 首页 > 面试题库 >

如何在不刷新页面的情况下更改页面URL?

傅砚
2023-03-14
问题内容

如何在不刷新页面的情况下更改URL?

我已经用CodeIginer建立了一个网站,我想在我的页面之一中实现AJAX和JQuery。问题是; 当我加载内容时,URL不会改变。

假设我有URL http://www.example.com/controller/function/param
和另一个URL:http://www.example.com/controller/function/param2

单击按钮时如何将第一个URL更改为第二个URL?


问题答案:

在HTML5中,您可以更改URL:

window.history.pushState("object or string", "Title", "/new-url");

检查http://spoiledmilk.com/blog/html5-changing-the-browser-url-without-
refreshing-page/

docs:https
:
//developer.mozilla.org/en/DOM/Manipulating_the_browser_history#The_pushState().c2.a0方法

更新

哪种浏览器支持新的HTML5历史记录API概述:

http://caniuse.com/#search=pushState(caniuse.com值得收藏!)

已经有一些框架可以为您完成艰苦的工作,甚至可以优雅地回退到常见的哈希标签解决方案:

History.js

History.js在所有浏览器中都优雅地支持HTML5历史记录/状态API(pushState,replaceState,onPopState)。包括对数据,标题,replaceState的持续支持。支持jQuery,MooTools和Prototype。对于HTML5浏览器,这意味着您可以直接修改URL,而无需再使用哈希。对于HTML4浏览器,它将恢复为使用旧的onhashchange功能。

Backbone.js

Backbone通过为模型提供键值绑定和自定义事件,具有丰富的可枚举函数API的集合,具有声明性事件处理的视图,并通过RESTful
JSON接口将其全部连接到现有应用程序,从而为重载JavaScript的应用程序提供结构。…在Backbone中,pushState支持纯粹是基于选择加入的。不支持pushState的旧版浏览器将继续使用基于哈希的URL片段,并且如果具有pushState的浏览器访问了哈希URL,则将透明地升级为真实URL。

Mootools (通过插件)

MooTools是一个紧凑的,模块化的,面向对象的JavaScript框架,专为中高级JavaScript开发人员设计。[…]通过popstate或hashchange进行历史记录管理。在不重新加载的情况下替换页面的URL,并在较旧的浏览器上使用Hashchange。

dojo工具包

使用Web标准作为平台,Dojo可以节省您的时间并随着开发过程进行扩展。这是经验丰富的开发人员用来构建高质量桌面和移动Web应用程序的工具包。[…]
dojox.app通过HTML5 pushState标准管理导航历史记录,并将其委托给启用浏览器的历史记录管理。

… 仅举几个。

(!!) 意识到

使用(Backbone文档中的引用)时的一个
重要副作用pushState

请注意,使用真实的URL要求您的Web服务器能够正确呈现这些页面 ,因此还需要进行后端更改。例如,如果您的路由为/ documents /
100,并且浏览器直接访问该URL,则您的Web服务器必须能够提供该页面。为了获得完全的搜索引擎可爬网性,最好让服务器为页面生成完整的HTML
…但是,如果是Web应用程序,则只需呈现与根URL相同的内容,然后用Backbone填充其余内容即可。视图和JavaScript可以正常工作。



 类似资料:
  • 我有一个带有视频播放器窗口的react js应用程序。我有一个管理面板,可以更改显示的视频的url。 我想当管理员改变显示的视频时,显示的视频在用户的另一边,改变而不刷新页面。 我怎么能那样做?

  • 问题内容: 我在JSF页面中有这3个字段 我也有一个具有以下属性的后备豆: 我希望在将某些值插入字段val1和val2中而不刷新页面时,outputText元素自动更改其值。结果变量应以这种方式计算(它正在计算百分比):(val1 * val2)/ 100 您能帮我解决我的一些疑问吗?: 我知道为此,我需要javascript或AJAX之类的东西。您认为最好的方法是什么? 我很想知道我如何使用AJ

  • 问题内容: 转到任何GitHub 页面,然后单击任何目录/文件,并观察URL的更改方式,但仅更新页面的一部分。没有整个页面重新加载。 我如何使用jQuery做类似的事情? 这对大多数浏览器都有效吗(我使用的是Chrome)? 问题答案: 他们使用历史记录API,或者专门使用。 您可以使用它,不需要jQuery,但是有一些插件,例如history.js。 这适用于大多数浏览器,即Chrome,Saf

  • 问题内容: 我的页面结构是: 如何在不刷新整个页面的情况下更新/刷新组件? 一旦用户成功登录,我想在标题中隐藏“登录”链接。标题在所有组件/路由中都是通用的。 问题答案: 您可以使用 来在整个应用程序的不同组件之间进行通信。您可以定义一个数据共享服务,其中包含 您可以订阅和发出更改的服务。 定义数据共享服务 在您的 提供商条目中添加。 接下来,将导入到您和您在其中执行登录操作的组件中。在订阅主题更

  • 问题内容: 有没有办法可以在不重新加载页面的情况下修改当前页面的URL? 如果可能,我想访问#哈希 之前 的部分。 我只需要更改域 后 的部分,所以就好像我没有违反跨域策略一样。 问题答案: 现在,可以在Chrome,Safari,Firefox 4+和Internet Explorer 10pp4 +中完成此操作! 例: 然后,您可以用来检测后退/前进按钮的导航:

  • 问题内容: 这有可能吗? 这是问题所在: 我有一个使用此URL的关键字搜索(搜索后):http:// localhost / thi / search?keyword = key 然后我有一个使用AjaxForm插件(jquery)的滑块搜索… 当我执行滑块搜索时,显然我仍然会在关键字搜索URL中(因为请求是通过ajax发送的) 有没有办法将当前网址更改为类似http:// localhost /