pjax发出多个请求

时间:2012-09-12 13:58:40

标签: ruby-on-rails-3 pjax

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

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

1 个答案:

答案 0 :(得分:0)

所以问题是我没有渲染应用程序模板,它在http体中没有返回任何内容。因此,它导致请求的pjax代码回退到标准GET。

为什么我没有渲染应用程序模板?好吧,我是个假人,在我的应用程序控制器中使用这个方法

def get_layout
  request.xhr? || request.headers['X-PJAX'] ? nil : 'application'
end

这里的问题是我在index.html.haml中使用content_for

- 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

然后我修改了应用程序视图,不渲染各种元素,如页眉,页脚,javascripts,css等

= render :partial => '/shared/footer' unless is_pjax?

现在.pjax请求将呈现页面和模板(左列,主页等)但不是已加载的现有元素。

希望这有助于其他人。