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这个参数对服务器生效了?
<?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这个参数对服务器生效了?