pjax使用小結

2022-07-09 10:36:18 字數 4046 閱讀 6658

雖然傳統的ajax方式可以非同步無重新整理改變頁面內容,但無法改變頁面url,因此有種方案是在內容發生改變後通過改變url的hash的方式獲得更好的可訪問性(如但是hash的方式有時候不能很好的處理瀏覽器的前進、後退,而且常規**要切換到這種方式還要做不少額外的處理。而pjax的出現就是為了解決這些問題,簡單的說就是對ajax的加強。

不使用pjax

使用pjax

優點:缺點:引入jquery和jquery.pjax.js

註冊事件

/*

* * 方式一 按鈕父節點監聽事件

* * @param selector 觸發點選事件的按鈕

* @param container 展示重新整理內容的容器,也就是會被替換的部分

* @param options 引數 */

$(document).pjax(selector, [container], options);

//方式二 直接對按鈕監聽,可以不用指定容器,使用按鈕的data-pjax屬性值查詢容器

$("a[data-pjax]").pjax();

//方式三 常規的點選事件監聽方式

$(document).on('click', 'a', $.pjax.click);

$(document).on('click', 'a', function

(event) );

//下列是原始碼中介紹的其他用法,由於本人暫時沒有那些需求暫時沒深究,有興趣的各位自己試試看哈

//表單提交

$(document).on('submit', 'form', function

(event) );

//載入內容到指定容器

$.pjax();

//重新當前頁面容器的內容

$.pjax.reload('#container');

引數名預設值

說明timeout

650ajax 超時時間(單位ms),超時後會執行預設的頁面跳轉,所以超時時間不應過短,不過一般不需要設定

push

true

使用window.history.pushstate改變位址列url(會新增新的歷史記錄)

replace

false

使用window.history.replacestate改變位址列url(不會新增歷史記錄)

maxcachelength

20快取的歷史頁面個數(pjax載入新頁面前會把原頁面的內容快取起來,快取載入後其中的指令碼會再次執行)

version

是乙個函式,返回當前頁面的pjax-version,即頁面中標籤內容。使用response.setheader("x-pjax-version", "")設定與當前頁面不同的版本號,可強制頁面跳轉而不是區域性重新整理。

scrollto

0頁面載入後垂直滾動距離(與原頁面保持一致可使過度效果更平滑)

type

"get"

ajax的引數,http請求方式

datatype

"html"

ajax的引數,響應內容的content-type

container

用於查詢容器的css選擇器,[container]引數沒有指定時使用

urllink.href

要跳轉的連線,預設a標籤的href屬性

target

link

pjax事件引數e的relatedtarget屬性,預設為點選的a標籤

fragment

使用響應內容的指定部分(css選擇器)填充頁面,服務端不進行處理導致全頁面請求的時候需要使用該引數,簡單的說就是對請求到的頁面做擷取

pjax失效情況除了上述引數外,ajax的一些引數也是可以設定在這裡的,不過一般沒什麼必要。

// ajax 最終引數: options = $.extend(true, {}, $.ajaxsettings, pjax.defaults, options);

會有一些情況導致pjax失效,下面結合原始碼分析下(省略部分無關**)

function

handleclick(event, container, options)

}

除了上述情況之外,還有下列幾種情況:

1. 點選鏈結後觸發的一系列事件, 除了pjax:click 和 pjax:clicked的事件源是點選的按鈕,其他事件的事件源都是要替換內容的容器。可以在pjax:start事件觸發時開始過度動畫,在pjax:end事件觸發時結束過度動畫。

事件名支援取消

引數說明

pjax:click

options

點選按鈕時觸發。可呼叫e.preventdefault();取消pjax

pjax:beforesend

xhr, options

ajax執行beforesend函式時觸發,可在**函式中設定額外的請求頭引數。可呼叫e.preventdefault();取消pjax

pjax:start

xhr, options

pjax開始(與伺服器連線建立後觸發)

pjax:send

xhr, options

pjax:start之後觸發

pjax:clicked

options

ajax請求開始後觸發

pjax:beforereplace

contents, options

ajax請求成功,內容替換渲染前觸發

pjax:success

data, status, xhr, options

內容替換成功後觸發

pjax:timeout

xhr, options

ajax請求超時後觸發。可呼叫e.preventdefault();繼續等待ajax請求結束

pjax:error

xhr, textstatus, error, options

ajax請求失敗後觸發。預設失敗後會跳轉url,如要阻止跳轉可呼叫e.preventdefault();

pjax:complete

xhr, textstatus, options

ajax請求結束後觸發,不管成功還是失敗

pjax:end

xhr, options

pjax所有事件結束後觸發

注意:pjax:beforereplace事件前pjax會呼叫extractcontainer函式處理頁面內容,即script[src]形式引入的js指令碼不會被重複載入,有必要可以改下原始碼。

2. 瀏覽器前進/後退導航時觸發的事件(暫時沒做過多研究)

事件名引數

說明pjax:popstate

頁面導航方向: 'forward'/'back'(前進/後退)

pjax:start

null, options

pjax開始

pjax:beforereplace

contents, options

內容替換渲染前觸發,如果快取了要導航頁面的內容則使用快取,否則使用pjax載入

pjax:end

null, options

pjax結束

比較漂亮的一款進度條外掛程式,用法十分簡單,很適合做pjax的過度動畫,詳細用法在該專案github上有介紹

示例連線:

pjax技術簡述

pjax是乙個jquery外掛程式,結合ajax和pushstate,能夠快速的實現頁面重新整理和url修改。頁面a鏈結和表單提交都能觸發pjax請求,伺服器返回請求的html片段,區域性替換頁面內容同時把url推送到歷史記錄中,有效降低了負載。一 實現基礎 1.在html4,histroy物件有下...

全站利用pjax無重新整理展示

全站利用pjax無重新整理展示 終於抽出空寫這篇文章了,還是在上班事件摸魚寫的 不得不說,pjax很好用,很強,很好理解,並且幫助開發者省去了很大部分的工作量 但是由於整站替換後,有些事件還是得自己寫一下 簡單的記錄一下,自己實現全站pjax的一系列過程吧 雖然傳統的 ajax 方式可以非同步無重新...

AJAX之再公升級版PJAX

優點 按需請求,每次只需載入頁面的部分內容,而不用重複載入一些公共的資源檔案和不變的頁面結構,大大減小了資料請求量,以減輕對伺服器的頻寬和效能壓力,還大大提公升了頁面的載入速度。缺點 pjax使用了pushstate來改變位址列的url,這是html5中history的新特性,在某些舊版瀏覽器中可能...