2012-12-20 38 views
2

我创建了一个密集使用Ajax加载其内容的网站。 我想要选择加载AJAX的页面,但同时URL也会更改,而不会重新加载整个页面内容。我将如何实现这一目标?我已经Google搜索,但我的搜索没有得到任何结果。当我发出Ajax请求时,如何更改地址栏?

比方说,我有这个页面:

<%@ taglib prefix="s" uri="/struts-tags"%> 
<%@ taglib prefix="sj" uri="/struts-jquery-tags"%> 
<!DOCTYPE HTML> 
<html> 
<head> 
    <meta http-equiv="Content-Type" content="text/html; charset=ISO-8859-1"> 
    <title>Insert title here</title> 
    <sj:head /> 
</head> 
<body> 
    <h5>Struts Jquery Ajax Integration </h5> 

    <div id="resultContent"></div> 
    <noscript>Please Turn On Javascript to make the full use of this site</noscript> 

    <h4>Choose A task</h4> 
    <ul> 
     <s:url value="views/ajaxvalidation.jsp" var="ajaxvalidation" /> 
     <li><sj:a targets="resultContent" href="%{ajaxvalidation}">Ajax Validation </sj:a></li> 
    </ul> 

    <div> 
     <h6>Play A Music while You Navigate</h6> 
     <audio src="x.mp3" controls>Your browser does not support the 
      audio element. 
     </audio> 
    </div> 
</body> 
</html> 

我点击了AJAX验证链接。它不会重新加载页面,但是但是网址将是这样的:

localhost:8090/AppName/ajaxvalidation.jsp 

或本:

localhost:8090/AppName/ajaxvalidation.action 

我将如何实现这一目标?

请注意,我用的这个插件:struts2-jquery

+0

似乎就像你必须在处理Ajax响应的处理程序代码上使用一些JavaScript一样。如果这就是你的想法,我不认为struts方面有什么可以实现这一点。 。 。 – chad

+0

我已更新我的问题。 – KyelJmD

+0

我认为这是不可能的;使用ajax意味着你发送页面的一个片段到服务器,改变url意味着改变行动 – Bourkadi

回答

3

您需要使用History API

window.history.pushState(data, title, url) 

更新

我注意到您使用struts2-jquery您可以添加ajaxhistory="true"启用ajax历史记录功能。见http://code.google.com/p/struts2-jquery/wiki/HeadTag#Attributes

<sj:head ajaxhistory="true" /> 

请记住,虽然,它不是在所有的浏览器版本的支持..

+0

你能提供一个例子吗?只是这个片段没什么意义。 – KyelJmD

+0

@KyelJmD,更新了答案.. –

+0

比方说,我已经设置了ajaxhistory =“true”,那么我将如何与window.history.pushState一起使用它?我开始明白这个主意,但仍然没有任何线索。或者我只是使用上述标签? – KyelJmD

0

您可以使用history.pushState如果浏览器支持(​​)

var boolPushState = false; 
if (typeof history.pushState !== "undefined") { 
     boolPushState = true; 
} 

if (boolPushState) { 
    history.pushState(null, null, "URL"); 
}