国产探花免费观看_亚洲丰满少妇自慰呻吟_97日韩有码在线_资源在线日韩欧美_一区二区精品毛片,辰东完美世界有声小说,欢乐颂第一季,yy玄幻小说排行榜完本

首頁(yè) > 編程 > JavaScript > 正文

使用pjax實(shí)現(xiàn)無(wú)刷新更改頁(yè)面url

2019-11-20 13:13:35
字體:
來(lái)源:轉(zhuǎn)載
供稿:網(wǎng)友

我們都知道ajax給瀏覽器帶來(lái)了異步加載的能力,在數(shù)據(jù)校驗(yàn)、局部刷新等方面提升了用戶(hù)體驗(yàn),但同時(shí)存在如下問(wèn)題:

1. 可以無(wú)刷新改變頁(yè)面內(nèi)容,但無(wú)法改變頁(yè)面URL
2. hash的方式不能很好的處理瀏覽器的前進(jìn)、后退等問(wèn)題

為了解決傳統(tǒng)ajax帶來(lái)的問(wèn)題,HTML5里加強(qiáng)了history API,加入了pushState、replaceState接口和popstate事件。這里就不詳細(xì)介紹了,沒(méi)有這方面知識(shí)的同學(xué)建議先看一下相關(guān)的資料。

pjax插件封裝了pushState和ajax操作,為我們提供了一個(gè)開(kāi)發(fā)這這類(lèi)web應(yīng)用的簡(jiǎn)單方法,具體步驟如下:

定義需要局部更新的容器

<div id="container"></div>
初始化pjax,監(jiān)聽(tīng)URL

復(fù)制代碼 代碼如下:

$(function(){
// pjax
$(document).pjax('a', '#container');
$.pjax.reload('#container');
})

后端處理pjax請(qǐng)求

后端的處理邏輯是,首先判斷是不是pjax請(qǐng)求,如果是的話(huà),根據(jù)請(qǐng)求參數(shù)返回局部?jī)?nèi)容,否則返回layout布局,然后由`$.pjax.reload('#container');`發(fā)起pjax請(qǐng)求。根據(jù)以上邏輯可以寫(xiě)出如下代碼:

復(fù)制代碼 代碼如下:

var pjaxFilter = function(req, res, next) {
if (req.get('X-PJAX')) {
next();
return;
}
//如果不是pjax請(qǐng)求的話(huà)直接返回布局模板
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問(wèn):jquery-pjax

發(fā)表評(píng)論 共有條評(píng)論
用戶(hù)名: 密碼:
驗(yàn)證碼: 匿名發(fā)表
主站蜘蛛池模板: 蚌埠市| 横山县| 明水县| 社旗县| 玉山县| 宜州市| 元江| 河北省| 西乌| 霍林郭勒市| 丹棱县| 庄河市| 资兴市| 泽普县| 莱芜市| 淳化县| 盐源县| 衡南县| 灌阳县| 新疆| 永城市| 阜新市| 利川市| 余庆县| 宣武区| 慈利县| 集贤县| 宾川县| 竹山县| 张家港市| 固镇县| 盘锦市| 双鸭山市| 浏阳市| 铜陵市| 缙云县| 大港区| 天柱县| 渑池县| 青铜峡市| 澎湖县|