更改 url 并更新页面内容而无需重新加载

Posted

技术标签:

【中文标题】更改 url 并更新页面内容而无需重新加载【英文标题】:Change url and update content of page without reload 【发布时间】:2016-02-01 22:50:38 【问题描述】:

这与我最后一年的 Web 开发项目有关。我想在不重新加载页面的情况下更改页面的内容-我知道这可以使用 css /ajax 或 jquery 来实现,但这只能通过 jquery 中的隐藏和显示或 replaceWith() 来实现。 我希望网址也可以更改。我想实现类似这个页面https://www.khanacademy.org/computing/computer-programming - 当用户点击 INTRO TO JS:Drawing and Animation 时,你会看到页面的 url 和内容发生变化,但页面不会重新加载。

指南将不胜感激。谢谢

一个小草稿:

**MY header.php**

<script language="javascript" src="jquery-1.4.4.min.js"></script>
<script>
$(function()
	$("a[rel='tab']").click(function(e)
		//e.preventDefault(); 
		/*	
		if uncomment the above line, html5 nonsupported browers won't change the url but will display the ajax content;
		if commented, html5 nonsupported browers will reload the page to the specified link. 
		*/
		
		//get the link location that was clicked
		pageurl = $(this).attr('href');
		
		//to get the ajax content and display in div with id 'content'
		$.ajax(url:pageurl+'?rel=tab',success: function(data)
			$('#content').html(data);
		);
		
		//to change the browser URL to 'pageurl'
		if(pageurl!=window.location)
			window.history.pushState(path:pageurl,'',pageurl);	
		
		return false;  
	);
);
/* the below code is to override back button to get the ajax content without reload*/
$(window).bind('popstate', function() 
	$.ajax(url:location.pathname+'?rel=tab',success: function(data)
		$('#content').html(data);
	);
);
</script>
<div id='menu'>
	<a rel='tab' href='http://localhost/html5-history-api/menu1.php'>menu1</a> | 
	<a rel='tab' href='http://localhost/html5-history-api/menu2.php'>menu2</a> | 
	<a rel='tab' href='http://localhost/html5-history-api/menu3.php'>menu3</a></div>

我的 menu1.php(menu2 和 3 的代码相同)

<?php 
if($_GET['rel']!='tab')
	include 'header.php';
	echo "<div id='content'>";

?>
menu1 content in menu1.php
<?php 
if($_GET['rel']!='tab')
	echo "</div>";
	include 'footer.php';
?>

当我点击链接时,我想要 - 链接消失,它只显示“menu1.php 中的菜单 1 内容”之类的内容,页面上没有其他内容

【问题讨论】:

您要更改网址并且不会重新加载整个页面? 查看***.com/questions/824349/… 查看 Angular JS,更具体地说,查看名为 Single page applications (SPA) 的概念。 Gmail、facebook 等现在都在使用相同的架构 @JohnReyM.Baylen :是的,状态可以推送到 URL 而无需重新加载页面。 @JohnReyM.Baylen 是的,约翰它会更改 url 并更改页面内容而无需重新加载 【参考方案1】:

我相信我从链接站点复制粘贴的这个脚本解释了它们如何替换 url。为了跟踪位置,他们使用 localStorage 来跟踪页面位置和其他内容。转到页面并导航到您引用的链接。然后打开控制台并输入 localStorage。当您按香蕉时,您会看到我在说什么。

你可以这样做

localStorage.setItem( "itemName", item )
localStorage.getItem( "itemName" )

以下是源码

<script type="text/javascript">
(function() 
        // If we arrived via a Facebook callback, it might have appended #_=_
        // to our URL. This can confuse our Backbone routers, so get rid of it.
        // http://***.com/questions/7131909/facebook-callback-appends-to-return-url
        if (window.location.hash === "#_=_")
            if (history.replaceState) 
                history.replaceState(null, null,
                        window.location.href.split("#")[0]);
             else 
                window.location.hash = "";
            
        
    )();
</script>

【讨论】:

确实如此,这只是他们页面上的一个示例。重要的信息是他们所做的这个版本是如何完成的。这些方法允许存储信息并从用户计算机的 localStorage 中调用信息。然后,您可以使用该信息来记住内容。使用 ajax 调用将 page.html 注入视图,并使用 FB 外观代码编辑 window.location。还动态注入 DOC。它的一组功能不是 1。我将发布一个带有 js / jquery 方法集的 github repo 来完成此任务,但我非常忙。启动时会向您发送消息。点就是您所需要的【参考方案2】:

如果您使用的是 chrome 浏览器,只需右键单击该 div 并使用选项“检查元素”。这些是 Web 开发人员的便捷工具。你提到的链接只是一个超链接,因为它是同一域下非常简单的静态页面,使用相同的资源(css,js),它的加载速度非常快,你会得到一个没有页面加载的印象。

【讨论】:

是的,这让我感到困惑-我确实尝试了检查元素,但没有看到任何 ajax 或 jquery,它们只是简单的 div

以上是关于更改 url 并更新页面内容而无需重新加载的主要内容,如果未能解决你的问题,请参考以下文章

更改浏览器 URL 而无需在 UI 上实际加载任何内容

根据无需重新加载页面加载的 URL 隐藏/显示 div

更改地址栏中的完整 URL,无需重新加载页面

Thymeleaf 表更新而无需重新加载页面

如何在不重新加载页面的情况下更新从 firestore 检索到的标记在我的地图上?

使用 Ajax 实时更改数据库