谁能说说 pjax 到底需不需要服务器配合使用? - V2EX
V2EX = way to explore
V2EX 是一个关于分享和探索的地方
现在注册
已注册用户请  登录
wangdaimishu
V2EX    问与答

谁能说说 pjax 到底需不需要服务器配合使用?

  •  
  •   wangdaimishu 2014-08-18 18:56:14 +08:00 5550 次点击
    这是一个创建于 4073 天前的主题,其中的信息可能已经有所发展或是发生改变。
    pjax 第一次用是在 Yii2 里,默认提供了Pjax.php这个组件,用法很简单,在需要局部刷新的地方写上:

    <?php \yii\widgets\Pjax::begin(['id' => 'content']);?>
    被包在里面的内容
    <?php \yii\widgets\Pjax::end();?>

    这样就行了,功能实现非常傻瓜化,效果也很好。

    本来按照我的估计,pjax 的工作原理无非就是请求整个页面,然后用正则表达式将指定 id 里的内容匹配出来,然后替换掉原页面里的内容,达到局部刷新的效果。

    但是当我用 firebug 之类的工具点开他请求链接的内容时就纳闷了,请求的 url 里返回来的内容就是我要刷新的那一小块,其他不相关的内容都没有。

    以此推断,正则查找的过程没有在客户端,而是在服务器端完成的?

    但是服务器怎么知道我具体要请求的是哪一小块内容?

    通过 firebug 查看,发现请求的 Header 里多了两个东西:

    X-PJAX:true
    X-PJAX-Container:#w0

    #w0 就是我要局部刷新的那一小块页面上的内容。

    是不是X-PJAX-Container这个参数对服务器生效了?
    7 条回复    2014-08-19 15:15:15 +08:00
    akira
        1
    akira  
       2014-08-18 22:42:18 +08:00
    php不是跑在服务器端的么?
    sodatea
        2
    sodatea  
       2014-08-19 01:20:47 +08:00
    显然的啊……如果请求的仍然是整个页面的话 PJAX 还有什么优势……
    loading
        3
    loading  
       2014-08-19 07:44:57 +08:00 via Android
    如果你包起来,在pjax发起时,数据传输会少那么一点,只传你包起来那段。

    pjax主要是提升用户体验,没有加载新页面是的白屏,。
    对于ajax页面,因为有pushstate,可以用浏览器历史,浏览器的前进后退操作不会丢,url很完美,而不是普通ajax的 #!
    loading
        4
    loading  
       2014-08-19 07:50:37 +08:00 via Android
    随意找了个:

    http://www.ueffort.com/pjax-ji-shu/
    pjax在浏览器就能做到,只是和服务器配合一下(X-PJAX),能达到最小传输量,如果你请求页面还有其他查询而pjax请求时不需要(例如部分cms没缓存的导航栏),会减少很多sql
    wangdaimishu
        5
    wangdaimishu  
    OP
       2014-08-19 08:39:41 +08:00
    @akira
    @sodatea
    @loading
    @loading
    我疑惑的是为什么Yii2的pjax 能准确知道我要更新哪一小块,后来我仔细阅读了一下 Pjax.php 这个组件的实现,发现是他在执行完以后立马就把内容发送出去了,不会像其他页面会整个渲染完一起发送到客户端去。
    akira
        6
    akira  
       2014-08-19 15:12:55 +08:00
    @wangdaimishu 你需要先补充下ajax的相关知识点。。
    wangdaimishu
        7
    wangdaimishu  
    OP
       2014-08-19 15:15:15 +08:00
    @akira ajax 的东西我当然知道怎么回事,我疑惑的是为什么他能在服务端判断出我要的内容片段,不过现在明白怎么回事了,是 Yii2 框架本身处理了一下。
    关于     帮助文档     自助推广系统     博客     API     FAQ     Solana     2727 人在线   最高记录 6679       Select Language
    创意工作者们的社区
    World is powered by solitude
    VERSION: 3.9.8.5 37ms UTC 12:28 PVG 20:28 LAX 05:28 JFK 08:28
    Do have faith in what you're doing.
    ubao snddm index pchome yahoo rakuten mypaper meadowduck bidyahoo youbao zxmzxm asda bnvcg cvbfg dfscv mmhjk xxddc yybgb zznbn ccubao uaitu acv GXCV ET GDG YH FG BCVB FJFH CBRE CBC GDG ET54 WRWR RWER WREW WRWER RWER SDG EW SF DSFSF fbbs ubao fhd dfg ewr dg df ewwr ewwr et ruyut utut dfg fgd gdfgt etg dfgt dfgd ert4 gd fgg wr 235 wer3 we vsdf sdf gdf ert xcv sdf rwer hfd dfg cvb rwf afb dfh jgh bmn lgh rty gfds cxv xcv xcs vdas fdf fgd cv sdf tert sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf shasha9178 shasha9178 shasha9178 shasha9178 shasha9178 liflif2 liflif2 liflif2 liflif2 liflif2 liblib3 liblib3 liblib3 liblib3 liblib3 zhazha444 zhazha444 zhazha444 zhazha444 zhazha444 dende5 dende denden denden2 denden21 fenfen9 fenf619 fen619 fenfe9 fe619 sdf sdf sdf sdf sdf zhazh90 zhazh0 zhaa50 zha90 zh590 zho zhoz zhozh zhozho zhozho2 lislis lls95 lili95 lils5 liss9 sdf0ty987 sdft876 sdft9876 sdf09876 sd0t9876 sdf0ty98 sdf0976 sdf0ty986 sdf0ty96 sdf0t76 sdf0876 df0ty98 sf0t876 sd0ty76 sdy76 sdf76 sdf0t76 sdf0ty9 sdf0ty98 sdf0ty987 sdf0ty98 sdf6676 sdf876 sd876 sd876 sdf6 sdf6 sdf9876 sdf0t sdf06 sdf0ty9776 sdf0ty9776 sdf0ty76 sdf8876 sdf0t sd6 sdf06 s688876 sd688 sdf86