我有一个用jQuery编写的Google Instant样式搜索脚本。当用户查询时,#search / SEARCHTERM / 1 /会添加到我的网页网址中。如何才能使我的URL在开头没有#?
这是我当前的jQuery代码:
$(document).ready(function(){
$("#search").keyup(function(){
var search=$(this).val();
var query=encodeURIComponent(search);
var yt_url='search.php?q='+query+'&category=web';
window.location.hash='search/'+query+'/1/';
document.title=$(this).val()+" - My Search Script";
if(search==''){
window.location.hash='';
document.title='My Search Script';
}
$.ajax({
type:"GET",
url:yt_url,
dataType:"html",
success:function(response){
$("#result").html(response);
}
});
});
});
答案 0 :(得分:1)
您无法从哈希中删除哈希:)但您可以使用pushState()方法更改整个网址。
https://developer.mozilla.org/en/DOM/Manipulating_the_browser_history#The_pushState().c2.a0method
pushState()有三个参数:a 状态对象,标题(即 目前被忽略)和(可选)a URL。
...
URL - 新历史记录条目的URL是 由此参数给出。请注意 浏览器不会尝试加载此URL 在调用pushState()之后,但是它 可能会稍后尝试加载URL, 例如,在用户重新启动之后 她的浏览器。新网址不需要 是绝对的;如果它是相对的,那就是 已解决相对于当前网址。
请注意,这在旧版浏览器中不起作用,您必须在使用JS生成的每个网址后面都有内容。
答案 1 :(得分:0)
您正在更改“window.location.hash”。从散列中删除散列很难:)
你的意思是改变“window.location”吗?
答案 2 :(得分:0)
要在没有URL哈希或查询字符串的情况下执行此操作,您可能需要在后端进行一些URL重写。
您可以使用类似于此的.htaccess文件来执行此操作:
DirectoryIndex search.php
RewriteEngine on
# If the requested file or directory does not exist
RewriteCond %{REQUEST_FILENAME} !-f
RewriteCond %{REQUEST_FILENAME} !-d
# silently redirect to the search page
RewriteRule ^search/(.*)$ search.php?q=$1 [L,QSA]
jQuery代码仍然需要使用搜索字符串来查询PHP脚本,但从客户端的角度来看,URL将使用search/searchterm/1/
样式。
正如Epeli所说,为了在没有哈希的情况下执行此操作并且不强制重新加载页面,您将需要使用history.pushState()
来更改URL而不是更改window.location。
如果您需要一些帮助将pushState()
集成到您的jQuery代码中,我可以稍后更新。