PJAX初步探究

這段時間一直在做vtiger的二次開發(fā)
在做新模塊的時候發(fā)現(xiàn)vtiger很多頁面是用pjax技術(shù)實(shí)現(xiàn)的
雖然說我也可以用ajax,為了和它本身統(tǒng)一
于是我只好用它的這種方式來做

Pjax=pushState + Ajax
Pjax和Ajax的最大的區(qū)別是
當(dāng)頁面有數(shù)據(jù)交互時,能夠改變地址欄的地址
用戶可以用前進(jìn)和后退來查看 交互前后的內(nèi)容

還有一點(diǎn)就是,pjax返回的是 帶html標(biāo)簽的字符串
所以請求后臺后,返回的是
<div>內(nèi)容</div>.........

下面說一下Pjax的用法

<body>
  <h1>My Site</h1>
  <div>
    <input type="button" id="clickMe" value="GO">
  </div>
  <div id="container"></div>    
</body>
<script src="jquery.js"></script>
<script src="pjax.js"></script>
<script type="text/javascript">
$(function(){
    $('#clickMe').click(function(){
        $.pjax({
            url: 'res3.php',
            container: '#container'
        });
    });
});
$(document).on('pjax:start', console.log(1)).on('pjax:end',console.log(2));
</script>

先加載jquery和pjax
用$.pjax來觸發(fā),url是請求地址,container是顯示內(nèi)容的 DOM選擇器

$.pjax({
            url: 'res3.php',
            container: '#container'
        });

options默認(rèn)參數(shù)說明
參數(shù)名 默認(rèn)值 說明
timeout 650 ajax 超時時間(單位ms),超時后會執(zhí)行默認(rèn)的頁面跳轉(zhuǎn),所以超時時間不應(yīng)過短,不過一般不需要設(shè)置
push true 使用window.history.pushState改變地址欄url(會添加新的歷史記錄)
replace false 使用window.history.replaceState改變地址欄url(不會添加歷史記錄)
maxCacheLength 20 緩存的歷史頁面?zhèn)€數(shù)(pjax加載新頁面前會把原頁面的內(nèi)容緩存起來,緩存加載后其中的腳本會再次執(zhí)行)
version 是一個函數(shù),返回當(dāng)前頁面的pjax-version,即頁面中<meta http-equiv="x-pjax-version">標(biāo)簽內(nèi)容。使用response.setHeader("X-PJAX-Version", "")設(shè)置與當(dāng)前頁面不同的版本號,可強(qiáng)制頁面跳轉(zhuǎn)而不是局部刷新。
scrollTo 0 頁面加載后垂直滾動距離(與原頁面保持一致可使過度效果更平滑)
type "GET" ajax的參數(shù),http請求方式
dataType "html" ajax的參數(shù),響應(yīng)內(nèi)容的Content-Type
container 用于查找容器的CSS選擇器,[container]參數(shù)沒有指定時使用
url link.href 要跳轉(zhuǎn)的連接,默認(rèn)a標(biāo)簽的href屬性
target link pjax事件參數(shù)e的relatedTarget屬性,默認(rèn)為點(diǎn)擊的a標(biāo)簽
fragment 使用響應(yīng)內(nèi)容的指定部分(css選擇器)填充頁面,服務(wù)端不進(jìn)行處理導(dǎo)致全頁面請求的時候需要使用該參數(shù),簡單的說就是對請求到的頁面做截取

這些值直接加在url后面即可
下面再說一下Pjax的事件

事件名 支持取消 參數(shù) 說明
pjax:click ? options 點(diǎn)擊按鈕時觸發(fā)??烧{(diào)用e.preventDefault();取消pjax
pjax:beforeSend ? xhr, options ajax執(zhí)行beforeSend函數(shù)時觸發(fā),可在回調(diào)函數(shù)中設(shè)置額外的請求頭參數(shù)??烧{(diào)用e.preventDefault();取消pjax
pjax:start xhr, options pjax開始(與服務(wù)器連接建立后觸發(fā))
pjax:send xhr, options pjax:start之后觸發(fā)
pjax:clicked options ajax請求開始后觸發(fā)
pjax:beforeReplace contents, options ajax請求成功,內(nèi)容替換渲染前觸發(fā)
pjax:success data, status, xhr, options 內(nèi)容替換成功后觸發(fā)
pjax:timeout ? xhr, options ajax請求超時后觸發(fā)??烧{(diào)用e.preventDefault();繼續(xù)等待ajax請求結(jié)束
pjax:error ? xhr, textStatus, error, options ajax請求失敗后觸發(fā)。默認(rèn)失敗后會跳轉(zhuǎn)url,如要阻止跳轉(zhuǎn)可調(diào)用 e.preventDefault();
pjax:complete xhr, textStatus, options ajax請求結(jié)束后觸發(fā),不管成功還是失敗
pjax:end xhr, options pjax所有事件結(jié)束后觸發(fā)

用法上面也寫出了
$(document).on('pjax:start', console.log(1)).on('pjax:end',console.log(2));
用document.on來綁定方法就行了

最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
【社區(qū)內(nèi)容提示】社區(qū)部分內(nèi)容疑似由AI輔助生成,瀏覽時請結(jié)合常識與多方信息審慎甄別。
平臺聲明:文章內(nèi)容(如有圖片或視頻亦包括在內(nèi))由作者上傳并發(fā)布,文章內(nèi)容僅代表作者本人觀點(diǎn),簡書系信息發(fā)布平臺,僅提供信息存儲服務(wù)。

相關(guān)閱讀更多精彩內(nèi)容

  • AJAX 原生js操作ajax 1.創(chuàng)建XMLHttpRequest對象 var xhr = new XMLHtt...
    碧玉含香閱讀 3,561評論 0 7
  • 前言 上周看到一篇文章在分析簡書 我的主頁[http://www.itdecent.cn/users/c5327...
    anyesu閱讀 39,465評論 23 35
  • Ajax和XMLHttpRequest 我們通常將Ajax等同于XMLHttpRequest,但細(xì)究起來它們兩個是...
    changxiaonan閱讀 2,390評論 0 2
  • 本文詳細(xì)介紹了 XMLHttpRequest 相關(guān)知識,涉及內(nèi)容: AJAX、XMLHTTP、XMLHttpReq...
    semlinker閱讀 13,995評論 2 18
  • 河流,在橫亙的橋下奔騰,歲月不止,村莊老去,人潮起落,又是一個小世界的喧嘩伏動。我出生在這里,這里有老舊的屋舍,有...
    泛指燁閱讀 289評論 0 2

友情鏈接更多精彩內(nèi)容