在 Chrome(版本 21)javascript 控制台中调用 pjax 时,我在开发日志中看到两个请求。我尝试按照这篇文章中的建议更改超时,但我仍然收到两个请求。有任何想法吗?
$.pjax({timeout: 4000,
container: '[data-pjax-container]',
url: document.location.href });
在 Chrome(版本 21)javascript 控制台中调用 pjax 时,我在开发日志中看到两个请求。我尝试按照这篇文章中的建议更改超时,但我仍然收到两个请求。有任何想法吗?
$.pjax({timeout: 4000,
container: '[data-pjax-container]',
url: document.location.href });
所以问题是我没有渲染应用程序模板,它在 http 正文中没有返回任何内容。因此,它导致请求回退到标准 GET 的 pjax 代码。
为什么我没有渲染应用程序模板?好吧,我是个假人,在我的应用程序控制器中使用了这个方法
def get_layout
request.xhr? || request.headers['X-PJAX'] ? nil : 'application'
end
这里的问题是我content_for
在我的 index.html.haml 中使用。
- content_for :sub_nav do
# view code
- content_for :main do
# view code
我的 application.html.haml 模板看起来像这样......
.col1
= yield :sub_nav
.col2
= yield :main
这是解决方案...
我将控制器方法重构为应用程序助手
def is_pjax?
request.xhr? || request.headers['X-PJAX'] ? true : false
end
然后我修改了应用程序视图以不呈现各种元素,如页眉、页脚、javascript、css 等
= render :partial => '/shared/footer' unless is_pjax?
现在 .pjax 请求将呈现页面和模板(左栏、主栏等),但不是已经加载的现有元素。
希望这对其他人有帮助。