我知道有類似的話題,但我仍然沒有得到工作解決方案。我想發送$.post
方法到服務器,並且在它之前我想修改URL(以允許用戶彼此共享URL),但不重新加載頁面。怎麼做 ?修改網址而不重新加載頁面
編輯:換句話說,我想讓$.post
方法過濾頁面上顯示的數據。但我也想修改用戶可以複製的URL。
我知道有類似的話題,但我仍然沒有得到工作解決方案。我想發送$.post
方法到服務器,並且在它之前我想修改URL(以允許用戶彼此共享URL),但不重新加載頁面。怎麼做 ?修改網址而不重新加載頁面
編輯:換句話說,我想讓$.post
方法過濾頁面上顯示的數據。但我也想修改用戶可以複製的URL。
這是不可能的。只有在#(哈希a.k.a.片段)之後的部分中,您可以修改而無需重新加載。之前的整個休息會啓動新的(或舊的)url的加載。
你可以用下面的JavaScript改變(與重裝):如果用戶使用的是最新的瀏覽器(幾乎任何東西,這不是IE)
location.href = 'http://www.whatever.com';
您無法修改表單元素上的'action'屬性? – 2012-01-17 21:37:18
你可以,但是,他想要什麼? – Armin 2012-01-17 21:38:05
也許我讀錯了,但它聽起來像他想在實際發佈之前更改'POST'操作的URL。 – 2012-01-17 21:39:15
,您可以使用新的HTML5 history methods。具體而言,history.replaceState
。
replaceState()
將更改頁面的URL而不重新加載它。您可以使用它像這樣:
$.post('/some/url/', {some: data}, function(d){
// Do whatever with the returned data...
// Change page URL
history.replaceState({}, '', '/some/url/');
});
或者你也可以加載數據前更改URL:
// Change page URL
history.replaceState({}, '', '/some/url/');
// load page data
$.post('/some/url/', {some: data}, function(d){
// Do whatever with the returned data...
});
對於replaceState
一個例子,去這裏:https://github.com/features/projects,並點擊4個選項卡。觀看網址更改,但沒有添加到歷史記錄:-)
謝謝,我會試試看。那麼,如果用戶使用IE,URL不會改變? – Tony 2012-01-17 22:38:57
@Tony:沒有。 'history.replaceState'在IE中不起作用。您應該在'replaceState'調用周圍添加'if(!!(window.history && window.history.replaceState))'。 – 2012-01-17 22:44:19
也許這就是你想要的?
<body>
...
<div id='urltocopy'></div>
...
</body>
function doPost() {
$('#urltocopy').html('<a href="http://newurltocopy">Please copy</a>');
$.ajax({
type: 'POST',
url: urlStr,
dataType: 'html',
success: function(data) {
},
data: {},
});
}
在現代瀏覽器中,你可以使用HTML5的['History.pushState'(http://badassjs.com/post/840846392/location-hash-is-dead-long-live-html5-pushstate) 。 – 2012-01-17 21:34:52
但是這會修改歷史記錄,而不是當前的網址。 – Armin 2012-01-17 21:37:41
@Armin:有['History.replaceState'](https://developer.mozilla.org/en/DOM/Manipulating_the_browser_history#The_replaceState().C2.A0方法),它只會改變當前的URL而不會推入歷史。 – 2012-01-17 21:50:13