使用pjax實(shí)現(xiàn)無刷新更改頁面url
我們都知道ajax給瀏覽器帶來了異步加載的能力,在數(shù)據(jù)校驗(yàn)、局部刷新等方面提升了用戶體驗(yàn),但同時(shí)存在如下問題:
1. 可以無刷新改變頁面內(nèi)容,但無法改變頁面URL
2. hash的方式不能很好的處理瀏覽器的前進(jìn)、后退等問題
為了解決傳統(tǒng)ajax帶來的問題,HTML5里加強(qiáng)了history API,加入了pushState、replaceState接口和popstate事件。這里就不詳細(xì)介紹了,沒有這方面知識(shí)的同學(xué)建議先看一下相關(guān)的資料。
pjax插件封裝了pushState和ajax操作,為我們提供了一個(gè)開發(fā)這這類web應(yīng)用的簡(jiǎn)單方法,具體步驟如下:
定義需要局部更新的容器
<div id="container"></div>
初始化pjax,監(jiān)聽URL
$(function(){
// pjax
$(document).pjax('a', '#container');
$.pjax.reload('#container');
})
后端處理pjax請(qǐng)求
后端的處理邏輯是,首先判斷是不是pjax請(qǐng)求,如果是的話,根據(jù)請(qǐng)求參數(shù)返回局部?jī)?nèi)容,否則返回layout布局,然后由`$.pjax.reload('#container');`發(fā)起pjax請(qǐng)求。根據(jù)以上邏輯可以寫出如下代碼:
var pjaxFilter = function(req, res, next) {
if (req.get('X-PJAX')) {
next();
return;
}
//如果不是pjax請(qǐng)求的話直接返回布局模板
res.render('layout', { title: 'Pjax simple demo' });
};
router.get('/', pjaxFilter, function(req, res) {
res.render('index');
});
router.get('/poem/:id', pjaxFilter, function(req, res) {
var poemId = req.params.id;
res.render('poem/' + poemId);
})
完整代碼:pjax-demo
這只是pjax最基礎(chǔ)的功能,pjax提供了豐富的api,請(qǐng)?jiān)L問:jquery-pjax
相關(guān)文章
學(xué)習(xí)javascript面向?qū)ο?理解javascript對(duì)象
這篇文章主要介紹了javascript對(duì)象,學(xué)習(xí)javascript面向?qū)ο螅信d趣的小伙伴們可以參考一下2016-01-01document.compatMode的CSS1compat使用介紹
這篇文章主要介紹了document.compatMode的CSS1compat使用,需要的朋友可以參考下2014-04-04onclick與listeners的執(zhí)行先后問題詳細(xì)解剖
javascript中onclick與listeners的執(zhí)行先后問題一直都是大家所疑惑的地方,接下來將為大家解決此疑惑,感興趣的朋友可以了解下哦2013-01-01深入理解js A*尋路算法原理與具體實(shí)現(xiàn)過程
這篇文章主要介紹了js A*尋路算法原理與具體實(shí)現(xiàn)過程,結(jié)合實(shí)例形式詳細(xì)分析了A*尋路算法的具體概念、原理、實(shí)現(xiàn)方法與相關(guān)操作技巧,需要的朋友可以參考下2018-12-12js實(shí)現(xiàn)iframe框架取值的方法(兼容IE,firefox,chrome等)
這篇文章主要介紹了js實(shí)現(xiàn)iframe框架取值的方法,可兼容IE,firefox,chrome等瀏覽器.涉及JavaScript針對(duì)框架元素取值的相關(guān)技巧,需要的朋友可以參考下2015-11-11