0

在 Chrome(版本 21)javascript 控制台中调用 pjax 时,我在开发日志中看到两个请求。我尝试按照这篇文章中的建议更改超时,但我仍然收到两个请求。有任何想法吗?

$.pjax({timeout: 4000,
      container: '[data-pjax-container]',
      url: document.location.href });
4

1 回答 1

0

所以问题是我没有渲染应用程序模板,它在 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 请求将呈现页面和模板(左栏、主栏等),但不是已经加载的现有元素。

希望这对其他人有帮助。

于 2012-09-12T17:06:18.777 回答