2012-09-12 217 views
0

在Chrome(版本21)javascript控制檯中調用pjax時,在我的開發日誌中看到兩個請求。我試圖改變超時,如this post中所建議的,但我仍然收到兩個請求。有任何想法嗎?pjax發出多個請求

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

回答

0

所以問題是我沒有渲染應用程序模板,它沒有在http正文中返回任何內容。因此,它導致請求回退到標準GET的pjax代碼。

爲什麼我不渲染應用程序模板?好吧,我是一個假人並使用此方法在我的應用程序控制器

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請求將呈現頁面和模板(左列,主等),但不被已加載的現有元素。

希望這可以幫助別人。

+0

爲什麼你的應用程序沒有在http正文中返回任何內容?難道它只是返回模板? – teaforthecat