首頁 web前端 js教程 Ajax頁面的前進後退與刷新如何實現

Ajax頁面的前進後退與刷新如何實現

Apr 03, 2018 am 10:35 AM
ajax 重新整理

這次帶給大家Ajax頁面的前進後退與刷新如何實現,實現Ajax頁面的前進後退與刷新注意事項有哪些,下面就是實戰案例,一起來看一下。

使用Ajax可以非同步取得數據,可以更有效率地渲染頁面。

但也存在這一些問題:

#再刷新頁面,頁面就會變成初始的狀態

瀏覽器的前進後退功能無效

搜尋引擎的爬蟲抓取不友善

1、

早前會使用瀏覽器的hash錨點來解決

不同的hash標記著頁面不同的部分,能修正頁面刷新資料不正確的問題

再透過onhashchange 事件監聽hash錨點的變化,手動進行前進後退操作,瀏覽器支持度

2、

隨後出現一種hashbang 的技術,即在url後加上標記# !/myPath 來解決上述的問題

透過一個路徑定義一個頁面部分,在單頁應用中可常見到(Angular中已經封裝了)。但好像只有google真正支援了對該路徑的爬取

3、

HTML5的新特性做了助力,透過pushState、replaceState 這兩個新的history方法和onpopstate 這個window事件,解決了上述三個問題

當然,也因為是HTML5的新特性,在舊版瀏覽器上支持度不好的,建議是再用hashbang的方法來兼容

本文主要講講pushState這幾個新東西

文字太枯燥了,先看看圖示直接點感受

##這個栗子目的是:初始值為0,透過非同步請求自增值,可以前進或後退以及刷新,新打開一個url後也能獲取相應的數據

history.pushState(state, title, url)
history.replaceState(state, title, url)
登入後複製
其中state是個json對象,可以自訂存放一些數據,title也就是這個url對應的標籤title(不過好像瀏覽器都忽略了這個參數)

url是某個頁面的標記url(操作只會改變網址列的url,並不會立刻載入這個url ,可以簡單的標記?w=a、ajaxPage.html/w=a、&w=a,只是一種標記,取值時對照著來就行)

replaceState和pushState的不同是:前者直接取代目前值,後者就是向堆疊中壓入一個值

window.onpopstate 事件觸發之後,可以透過history.state取得到上述方法的第一個json物件

實作部分

HTML

<p class="push-state-test">
<input type="button" id="ajax-test-btn" value="Ajax获取">
<p>value: <span id="ajax-test-val">0</span></p>
</p>
登入後複製
JS

var $val = $('#ajax-test-val'),
// 获取当前页面的标记
m = window.location.search.match(/\?val=(\d+)/);
// 新进入页面,通过url中的标记初始化数据
if (m) {
increaseVal(m[1] - 1);
}
// 请求
function increaseVal(val) {
$.post('ajax-test.php', {
val: val
}, function(newVal) {
$val.text(newVal);
// 存储相关值至对象中
var state = {
val: newVal,
title: 'title-' + newVal,
url: '?val=' + newVal
}
// 将相关值压入history栈中
window.history.pushState && window.history.pushState(state, state.title, state.url);
});
}
$('#ajax-test-btn').click(function() {
increaseVal(parseInt($val.text(), 10));
});
// 浏览器的前进后退,触发popstate事件
window.onpopstate = function() {
var state = window.history.state;
console.log(state)
// 直接将值取出,或再次发个ajax请求
$val.text(state.val);
window.history.replaceState && window.history.replaceState(state, state.title, state.url);
};
登入後複製
PHP

<?php
$val = $_REQUEST[&#39;val&#39;];
echo $val + 1;
?>
登入後複製
這裡透過?val=num 的方式,標記了不同的ajax結果頁

Tips:

使用pushState之後,當前進後退觸發了popstate事件,獲取到對應的json物件

json物件的資料可自訂

可簡單地儲存相關標記再發個請求,或直接將該標記頁對應的結果直接存起來

隨著後退操作,網址列url得到了更新,異步的資料也得到了更新

#刷新頁面或新開啟頁面,就要根據url中的標記去請求資料了

要記住的是,瀏覽器並不會

自動載入url這部分標記對應的這個非同步內容頁,需要我們去獲取

相信看了本文案例你已經掌握了方法,更多精彩請關注php中文網其它相關文章!

推薦閱讀:

AJAX的佇列請求如何實現(附程式碼)

pushState+Ajax實作無刷新的頁面切換

以上是Ajax頁面的前進後退與刷新如何實現的詳細內容。更多資訊請關注PHP中文網其他相關文章!

本網站聲明
本文內容由網友自願投稿,版權歸原作者所有。本站不承擔相應的法律責任。如發現涉嫌抄襲或侵權的內容,請聯絡admin@php.cn

熱AI工具

Undresser.AI Undress

Undresser.AI Undress

人工智慧驅動的應用程序,用於創建逼真的裸體照片

AI Clothes Remover

AI Clothes Remover

用於從照片中去除衣服的線上人工智慧工具。

Undress AI Tool

Undress AI Tool

免費脫衣圖片

Clothoff.io

Clothoff.io

AI脫衣器

Video Face Swap

Video Face Swap

使用我們完全免費的人工智慧換臉工具,輕鬆在任何影片中換臉!

熱工具

記事本++7.3.1

記事本++7.3.1

好用且免費的程式碼編輯器

SublimeText3漢化版

SublimeText3漢化版

中文版,非常好用

禪工作室 13.0.1

禪工作室 13.0.1

強大的PHP整合開發環境

Dreamweaver CS6

Dreamweaver CS6

視覺化網頁開發工具

SublimeText3 Mac版

SublimeText3 Mac版

神級程式碼編輯軟體(SublimeText3)

熱門話題

Java教學
1654
14
CakePHP 教程
1413
52
Laravel 教程
1306
25
PHP教程
1252
29
C# 教程
1225
24
在 iPhone 上刷新網頁的 6 種方法 在 iPhone 上刷新網頁的 6 種方法 Feb 05, 2024 pm 02:00 PM

當您在iPhone上瀏覽網頁時,載入的內容會暫時存儲,只要瀏覽器應用程式保持開啟。然而,網站會定期更新內容,因此刷新頁面是清除舊資料並查看最新發佈內容​​的有效方法。這樣,您可以始終獲得最新的資訊和體驗。如果您想在iPhone上刷新頁面,以下貼文將向您解釋所有方法。如何在Safari上刷新網頁[4種方法]有幾種方法可以刷新您在iPhone上的Safari瀏覽器App上查看的頁面。方法1:使用「刷新」按鈕刷新您在Safari瀏覽器上開啟的頁面的最簡單方法是使用瀏覽器標籤列上的「刷新」選項。如果Safa

F5刷新金鑰在Windows 11中不起作用 F5刷新金鑰在Windows 11中不起作用 Mar 14, 2024 pm 01:01 PM

您的Windows11/10PC上的F5鍵是否無法正常運作? F5鍵通常用於刷新桌面或資源管理器或重新載入網頁。然而,我們的一些讀者報告說,F5鍵正在刷新他們的計算機,並且無法正常工作。如何在Windows11中啟用F5刷新?要刷新您的WindowsPC,只需按下F5鍵即可。在某些筆記型電腦或桌上型電腦上,您可能需要按下Fn+F5組合鍵才能完成刷新操作。為什麼F5刷新不起作用?如果按下F5鍵無法刷新您的電腦或在Windows11/10上遇到問題,可能是因為功能鍵被鎖定。其他潛在原因包括鍵盤或F5鍵

PHP 與 Ajax:建立一個自動完成建議引擎 PHP 與 Ajax:建立一個自動完成建議引擎 Jun 02, 2024 pm 08:39 PM

使用PHP和Ajax建置自動完成建議引擎:伺服器端腳本:處理Ajax請求並傳回建議(autocomplete.php)。客戶端腳本:發送Ajax請求並顯示建議(autocomplete.js)。實戰案例:在HTML頁面中包含腳本並指定search-input元素識別碼。

解決jQuery AJAX請求遇到403錯誤的方法 解決jQuery AJAX請求遇到403錯誤的方法 Feb 20, 2024 am 10:07 AM

標題:解決jQueryAJAX請求出現403錯誤的方法及程式碼範例403錯誤是指伺服器禁止存取資源的請求,通常會導致出現這個錯誤的原因是請求缺少權限或被伺服器拒絕。在進行jQueryAJAX請求時,有時會遇到這種情況,本文將介紹如何解決這個問題,並提供程式碼範例。解決方法:檢查權限:首先要確保請求的URL位址是正確的,同時驗證是否有足夠的權限來存取該資

如何快速刷新網頁? 如何快速刷新網頁? Feb 18, 2024 pm 01:14 PM

頁面刷新在我們日常的網路使用中非常常見,當我們訪問一個網頁後,有時會遇到一些問題,例如網頁加載不出來或顯示不正常等。這時候我們通常會選擇刷新頁面來解決問題,那麼要如何快速刷新頁面呢?下面我們就來探討頁面刷新的快捷鍵。頁面刷新快捷鍵是一種透過鍵盤操作來快速刷新目前網頁的方法。在不同的作業系統和瀏覽器中,頁面刷新的快捷鍵可能有所不同。下面我們以常見的W

解決jQuery AJAX請求403錯誤的方法 解決jQuery AJAX請求403錯誤的方法 Feb 19, 2024 pm 05:55 PM

jQuery是一個受歡迎的JavaScript函式庫,用來簡化客戶端端的開發。而AJAX則是在不重新載入整個網頁的情況下,透過發送非同步請求和與伺服器互動的技術。然而在使用jQuery進行AJAX請求時,有時會遇到403錯誤。 403錯誤通常是伺服器禁止存取的錯誤,可能是由於安全性原則或權限問題導致的。在本文中,我們將討論如何解決jQueryAJAX請求遭遇403錯誤

如何解決jQuery AJAX報錯403的問題? 如何解決jQuery AJAX報錯403的問題? Feb 23, 2024 pm 04:27 PM

如何解決jQueryAJAX報錯403的問題?在開發網頁應用程式時,經常會使用jQuery來發送非同步請求。然而,有時在使用jQueryAJAX時可能會遇到錯誤代碼403,表示伺服器禁止存取。這種情況通常是由伺服器端的安全性設定所導致的,但可以透過一些方法來解決這個問題。本文將介紹如何解決jQueryAJAX報錯403的問題,並提供具體的程式碼範例。一、使

如何使用Ajax從PHP方法取得變數? 如何使用Ajax從PHP方法取得變數? Mar 09, 2024 pm 05:36 PM

使用Ajax從PHP方法取得變數是Web開發中常見的場景,透過Ajax可以實作頁面無需刷新即可動態取得資料。在本文中,將介紹如何使用Ajax從PHP方法中取得變量,並提供具體的程式碼範例。首先,我們需要寫一個PHP檔案來處理Ajax請求,並傳回所需的變數。下面是一個簡單的PHP檔案getData.php的範例程式碼:

See all articles