pjax學習

PJAX 介紹

紅薯?發布于 2012/04/11 22:06
?
閱讀 61K+
?
收藏?116
?
?評論?11
jQuery.Pjax?kissy
開發四年只會寫業務代碼,分布式高并發都不會還做程序員?->>>???

介紹

pushState是一個可以操作history的api,該api的介紹和使用請見這里:http://www.welefen.com/use-ajax-and-pushstate.html

目前已經有http://github.com/,?http://plus.google.com,?http://www.welefen.com?等網站已經使用。

pjax是對ajax + pushState的封裝,讓你可以很方便的使用pushState技術。

同時支持了緩存和本地存儲,下次訪問的時候直接讀取本地數據,無需在次訪問。

并且展現方式支持動畫技術,可以使用系統自帶的動畫方式,也可以自定義動畫展現方式。

如何使用

jquery版

將jquery.pjax.js部署到你的頁面中,將需要使用pjax的a鏈接進行綁定(不能綁定外域的url),如:

    $.pjax({selector: 'a',container: '#container', //內容替換的容器 show: 'fade', //展現的動畫,支持默認和fade, 可以自定義動畫方式,這里為自定義的function即可。 cache: true, //是否使用緩存 storage: true, //是否使用本地存儲 titleSuffix: '', //標題后綴 filter: function(){}, callback: function(){} })

?

qwrap版

qwrap版需要在頁面引入qwrap和對應的ajax組件。

qwrap見:?https://github.com/jkisjk/qwrap

對應的ajax組件見:?https://github.com/jkisjk/qwrap/tree/master/resource/js/wagang/ajax

或者你直接引用我打包好的:?http://www.welefen.com/wp-content/themes/gplus/js/qwrap.js?由于我的空間速度不咋地,建議你另存為。

    QW.pjax(selector: 'a',container: '#container',cache: true, storage: true, titleSuffix: '', filter: function(){}, callback: function(){} })

?

kissy版

kissy版需要在頁面引入kissy。

kissy見:?http://docs.kissyui.com/

        KISSY.pjax(selector: 'a',container: '#container',cache: true, storage: true, titleSuffix: '', filter: function(){}, callback: function(){} })

?

由于kissy核心沒有引用sizzle, 只支持一些簡單的selector, 所以selector參數的值最好只為a, 對于一些不使用pjax的鏈接,可以通過filter函數參數進行過濾,具體的使用方法見下面的參數說明。

參數及含義

=== options.selector

給哪些selector綁定pjax事件,一般的為:"a", 如果要去掉一些外連的URL, 這里的selector可以為: "a[href^='http://www.welefen.com']"

,表示域名是www.welefen.com下才有pjax事件(也就是站內)。

=== options.container

內容變換容器,是指哪個容器里的內容發生的變換,如: '#content',

=== options.cache

緩存pjax的內容,對于更新不頻繁的頁面來說,緩存pjax內容可以減少HTTP請求數

options.cache的值是緩存時間,單位為秒,默認為: 24*3600(一天)

=== options.storage

是否使用本地存儲進行內容的緩存,使用本地存儲緩存的話即使關閉瀏覽器后,下次訪問如果緩存時間有效的話會直接讀取緩存的內容,避免重新請求了。

=== options.titleSuffix

標題后綴。

對于pjax顯示標題,首先會從返回內容里查找,如果沒有的話,會取當前a標簽的title值,并可以指定統一的后綴

=== options.filter

過濾函數,雖然options.selector可以寫個比較復雜的選擇器,但有時候還要過濾一些URL,如:后臺的URL。

這時候就可以使用options.filter函數進行過濾了。如:

    {fitler: function(href){//對于wordpress后臺的URL和wp-content里的URL不使用pjaxif(href.indexOf('/wp-admin') || href.indexOf('/wp-content')){ return true; } } }

?

對于要過濾掉的URL, 需要返回值為true。

=== options.callback

回調函數,這個函數不同于pjax.start和pjax.end(這2個事件下面描述)事件。

該函數會在每個階段都會執行,即使pjax發生error的時候,并且會傳遞一個參數標明當前的狀態,如:

    {callback: function(status){ var type = status.type; switch(type){ case 'success': ;break; //正常 case 'cache':;break; //讀取緩存 case 'error': ;break; //發生異常 case 'hash': ;break; //只是hash變化 } } }

?

事件(events)

一般情況下使用ajax來獲取數據的時候,我們都希望有個loading的效果,pjax本身不提供這個功能,但提供了2個相關的事件。

如果需要這樣的功能,可以在事件里實現這種功能。

  • pjax.start 在pjax ajax發送request之前調用
  • pjax.end 在phax ajax結束時調用

這樣你可以在pjax.start事件里顯示loading效果,在pjax.end事件里隱藏loading了。如:

    $('#container').bind('pjax.start', function(){ $('#loading').show(); }) $('#container').bind('pjax.end', function(){ $('#loading').hide(); })

瀏覽器支持

提供了history.pushState接口的瀏覽器才支持這個功能

如果瀏覽器不支持這個功能而調用pjax方法的話,實際上什么都沒做,還是使用默認的鏈接響應機制

后端需要做的

類似于ajax, 異步請求的時候后端不能將公用的內容也返回。

所以需要一個判斷是否pjax請求的接口。如:php可以借鑒下面的實現

    function is_pjax(){ return array_key_exists('HTTP_X_PJAX', $_SERVER) && $_SERVER['HTTP_X_PJAX']; } 

其他

實際上該類的封裝借鑒于https://github.com/defunkt/jquery-pjax

對其增加了緩存、本地存儲和動畫等功能,并且將一些參數進行了優化。

轉載于:https://www.cnblogs.com/feiwenstyle/p/10893396.html

本文來自互聯網用戶投稿,該文觀點僅代表作者本人,不代表本站立場。本站僅提供信息存儲空間服務,不擁有所有權,不承擔相關法律責任。
如若轉載,請注明出處:http://www.pswp.cn/news/279500.shtml
繁體地址,請注明出處:http://hk.pswp.cn/news/279500.shtml
英文地址,請注明出處:http://en.pswp.cn/news/279500.shtml

如若內容造成侵權/違法違規/事實不符,請聯系多彩編程網進行投訴反饋email:809451989@qq.com,一經查實,立即刪除!

相關文章

SQL Server 2000詳細安裝過程及配置

說明:這篇文章是幾年前我發布在網易博客當中的原創文章,但由于網易博客現在要停止運營了,所以我就把這篇文章搬了過來,雖然現如今SQL Server 2000軟件早已經過時了,但仍然有一部分人在使用它,尤其是某些高校…

移動應用ios和網頁應用_如何在iOS上一次移動多個應用

移動應用ios和網頁應用Apple doesn’t really believe in detailed instruction manuals, so some handy tricks slip through the cracks. One such trick we’ve recently discovered is that you can move multiple app icons at once on iOS. Here’s how. Apple并不真正相…

如何將內核靜態庫編譯連接到驅動程序中去【轉】

轉自:http://blog.csdn.net/ganjianfeng2003/article/details/8089551 如何將內核靜態庫編譯連接到驅動程序中去 2010-12-07 08:27 331人閱讀 評論(1) 收藏 舉報 http://blog.chinaunix.net/u2/61663/showart_2404744.html 剛上郵箱的時候發現一位網友向我詢問這個問…

2018-2019 20165226 Exp9 Web安全基礎

2018-2019 20165226 Exp9 Web安全基礎 目錄 一、實驗內容說明及基礎問題回答 二、實驗過程 Webgoat準備XSS攻擊 ① Phishing with XSS 跨站腳本釣魚攻擊② Stored XSS Attacks 存儲型XSS攻擊③ Reflected XSS Attacks 反射型XSS攻擊 CSRF攻擊 ① Cross Site Request Forgery(CS…

用 git 同步 Colab 與 Gitlab、Github 之間的文件

Colab 是谷歌提供的免費 Jupyter 服務,可使用 GPU。但由于每次的 VM (虛擬機)登出后所有文件都會連同VM被毀掉。如何將一個項目里的程序或數據同步到 Colab則往往比較麻煩。盡管谷歌盤也可以掛到 Colab 里用&#xff0…

keep-alive使用_如何使用Google Keep進行無憂筆記

keep-alive使用There are a lot of note-taking apps out there. Google Keep may not be as powerful as services like Evernote, but its value is in its simplicity. Let’s talk about how to make the most of it. 那里有很多筆記應用程序。 Google Keep可能不如Evernot…

ZedGraph在項目中的應用

ZedGraph在項目中的應用將數據庫數據提取出來,顯示成曲線圖(餅狀、柱狀或立體圖)是項目中最常見的需求。 網上搜索到的解決方法,大多歸為兩類,一種是利用ActiveX組件,另一種是使用.net框架自帶的畫圖的類。…

TCP/IP:IP多播選路

本節主要討論多播選路,是在整個互聯網上的多播,我們將討論mrouted程序的執行,該程序計算多播路由表,以及再網絡之間轉發多播數據包的內核函數。 多播輸出處理 這個和IGMP的輸出處理類似,主要要注意有環回的多播輸出和沒…

Leetcode#832. Flipping an Image(翻轉圖像)

題目描述 給定一個二進制矩陣 A,我們想先水平翻轉圖像,然后反轉圖像并返回結果。 水平翻轉圖片就是將圖片的每一行都進行翻轉,即逆序。例如,水平翻轉 [1, 1, 0] 的結果是 [0, 1, 1]。 反轉圖片的意思是圖片中的 0 全部被 1 替換&a…

數據安全 數據銷毀_如何安全銷毀敏感數據CD / DVD?

數據安全 數據銷毀You have a pile of DVDs with sensitive information on them and you need to safely and effectively dispose of them so no data recovery is possible. What’s the most safe and efficient way to get the job done? 您有一堆DVD,上面有敏…

cannot find -lunwind-x86_64

錯誤代碼:; }) libtool: install: /usr/bin/install -c .libs/libunwind.lai /usr/local/lib/libunwind.la libtool: install: warning: relinking libunwind-setjmp.la libtool: install: (cd /down/libunwind-1.0/src; /bin/sh /down/libunwind-1.0/libtool --…

動態切換父元素隱藏和顯示里面的子元素的動畫會再一次執行嗎?

代碼&#xff1a;完整代碼:<!DOCTYPE html> <html> <head> <meta charset"UTF-8"> <title></title> <style type"text/css"> *{ margin: 0; padding: 0; } .box{ background-color: #00B83F; } .flag{ position…

MAD huashi

name1 input("請輸入一個名字") name2 input("請輸入一個名詞") name3 input("請輸入一個形容詞") name4 input("請輸入一個名字") name5 input("請輸入一個名字") name6 input("請輸入一個長輩名字") name…

如何使用QuickConnect遠程訪問Synology NAS

Your Synology NAS includes a QuickConnect feature that lets you access its DiskStation Manager interface remotely. Here’s how to set it up. Synology NAS包含快速連接功能&#xff0c;可讓您遠程訪問其DiskStation Manager界面。 設置方法如下。 You were likely gr…

深入MySQL存儲引擎分析鎖和排序的原理

幾個問題 為什么不建議使用訂單號作為主鍵?為什么要在需要排序的字段上加索引?for update 的記錄不存在會導致鎖住全表?redolog 和 binlog 有什么區別?MySQL 如何回滾一條 sql ?char(50) 和 varchar(50) 效果是一樣的么?索引知識回顧 對于 MySQL 數據庫而言,數據是存儲在…

網絡編程介紹

1. 目標:編寫一個C/S架構的軟件 C/S: Client--------基于網絡----------Server B/S: Browser-------基于網絡----------Server2. 服務端需要遵循的原則: 1. 服務端與客戶端都需要有唯一的地址,但是服務端的地址必須固定/綁定 2. 對外一直提供服務,穩定運行 3. 服…

[Web開發] MySpace 發布開發接口

2007年風頭最盛的Web 2.0公司應該就是Facebook &#xff0c;其一炮走紅的絕招就是它的開發平臺。 開發者可以為Facebook 加入各種插件&#xff0c;豐富Facebook 。為了對抗 Facebook &#xff0c; 社交網站的老大Myspace 也推出了自己開發平臺 http://developer.myspace.com/c…

css段落縮進_如何縮進Google文檔中的段落

css段落縮進Indenting paragraphs in Google Docs requires access to the ruler, which you’ll only find in the full web version. The ruler is not present in the mobile apps. 在Google文檔中縮進段落需要訪問標尺&#xff0c;而標尺只能在完整的網絡版本中找到。 標尺…

卡包模板

$json_data array(); $json_data[request_id] date(YmdHis).mt_rand(10000,99999); $json_data[card_type] OUT_MEMBER_CARD; $json_data[biz_no_prefix] prex; $json_data[biz_no_suffix_len] 10; $json_data[write_off_type] qrcode; #qrcode: 二維碼 dqrcode: 動態二維…

暑假個人小結

今天。。。不&#xff0c;是昨天&#xff0c;聶老大讓我們寫暑期總結 其中有這么一個 &#xff08;300字啊。。。我得好好想想怎么編&#xff09; 嘛&#xff0c;在這寫點不敢交上去的內容吧。 7月總結 我收獲了什么 很多課件 兩個qq群 slay.one被人虐 聯盟無畏先鋒的號到了20級…