我有以下的測試程序:http://dev.driz.co.uk/ajax/使用後退和前進按鈕與歷史API
您可以點擊的鏈接使用jQuery AJAX在其他頁面加載和有兩種類型,globalTabs和localTabs其負載內容分成不同的面板。注意:每個頁面實際上是完整頁面,但我們只使用jQuery查找方法獲取我們想要的內容。
爲了加強這一點,我使用了HTML5 History API(用於跨瀏覽器的History.js)。
標題和網址更改正常,歷史堆棧被推送成功,當我使用後退和前進按鈕時,網址和標題將恢復。
現在複雜的部分從前一狀態加載回內容並且更復雜地加載正確的類型,例如,全球或本地ajax。爲了實現這一點,我想我需要傳遞數據和類型到推狀態,以便它可以重新用於popstate ...
任何人都可以幫助指向正確的方向嗎?我有所有的第一部分工作,只是將ajax類型傳遞給pushState,然後重複使用popstate更改的情況。
要在此我重寫它改進如下,以顯示我的計劃傳遞的類型和數據:
注:大寫歷史是因爲我使用History.js
var App = {
init: function() {
$(document).ready(function() {
$('.globalTabs li a').live('click', function (e) {
e.preventDefault();
App.globalLoad($(this).attr('href'));
});
$('.localTabs li a').live('click', function (e) {
e.preventDefault();
App.localLoad($(this).attr('href'));
});
});
window.addEventListener('popstate', function(event) {
// Load correct content and call correct ajax request...
});
},
localLoad: function (url) {
$.ajax({
url: url,
success: function (responseHtml) {
$('.localContent').html($(responseHtml).find('#localHtml'));
$data = { $(responseHtml).find('#localHtml'), 'local'};
History.pushState($data, $(responseHtml).filter('title').text(), url);
}
});
},
globalLoad: function (url) {
$.ajax({
url: url,
success: function (responseHtml) {
$('.mainContent').html($(responseHtml).find('#globalHtml'));
$data = { $(responseHtml).find('#globalHtml'), 'global'};
History.pushState($data, $(responseHtml).filter('title').text(), url);
}
});
}
};
App.init();
更新:爲了澄清這個問題,他們是我尋求幫助的兩個問題。
1.)獲取後退和前進按鈕與ajax請求一起工作,以便他們將正確的數據加載回內容區域。
2.)將內容加載到正確的區域,同時也通過pushState方法傳遞內容,以便它知道它是全局div還是本地div請求。
那麼我該如何解僱?你沒有提到popstate?因爲我需要做的是在用戶使用後退和前進按鈕時更改內容,然後改變標題(有效地複製ajax調用所做的),而不是使用ajax,它將使用歷史數據,因爲沒有點重新加載它顯然。 – Cameron 2012-08-25 11:15:12
我也收到錯誤:'Uncaught TypeError:將圓形結構轉換爲JSON'任何想法有什麼不對? http://dev.driz.co.uk/ajax/ – Cameron 2012-08-25 12:04:18
編輯我的迴應,關於json錯誤,只檢查你是否傳遞簡單對象,沒有功能 – cuzzea 2012-08-25 18:10:16