2013-08-27 131 views
0

我正在使用ROR應用程序。該應用程序視圖包含Ajax和jQuery代碼:Rails渲染不刷新頁面

jQuery.ajax({ 
    data:  'val=' + val, 
    dataType: 'script', 
    type:  'post', 
    url:  "/portfolio/update" 
}); 

更新動作包含此代碼:

def update 
    j = params[:val] 

    # Buisness logic code 
    redirect_to root_url, notice: "update done" 
end 

當前視圖和根URL是相同的 - 投資組合/顯示 現在來看按鈕(這是隻有root_url)正在做好業務邏輯,但頁面沒有被刷新,而視圖上的其他簡單表單按鈕正在執行。按下按鈕後,我得到這在rails服務器:

Rendered portfolio/show.erb (1.5ms) 
Completed 200 OK in 24ms (Views: 4.1ms) 

任何猜測,但頁面不刷新自己。

回答

1

Ajax用於提供不需要頁面刷新的功能。如果你想頁面刷新,那麼你應該使用HTML表單並提交按鈕。

<%= form_for %> 
    ..... 
    <% submit %> 

或使用Ajax,你需要做手工成功回調,

這樣,

$.ajax({ 

success: function(){ 
    window.location.reload(); 
} 
); 
+0

基本上在同一頁上。我開始在阿賈克斯你可以詳細說明一下。 –

+0

它應該是window.location.reload() –

1

沒有猜測需要。您的控制器以錯誤的類型迴應。

redirect_to只能在html響應下工作。當你的請求類型是'script'這個'js'時,什麼都不能呈現。

要糾正它

def update 
    # blah blah 
    respond_to |format| 
    format.html { redirect_to some_path } 
    format.js # This will render default js template views/portfolio/update.js.erb 
    end 
end 

用ajax我打電話我的作用,這是更新我的數據庫,然後我不得不刷新我的網頁,以顯示更新後的數據然後準備JS模板

$('#div_to_update').html('new html code to update the view') 
+0

它不刷新頁面。你忘了添加到你的代碼。 Rails的輸出:渲染投資組合/ update.js.erb(0.0ms) 在4ms中完成200 OK(查看:1.6ms) –

+0

@DeependerSingla,如果使用JS,重載頁面不是很好,更新div是首選。例如,您在這裏投票答案,頁面不刷新,但投票數量增加。但是你仍然可以在js模板中添加你需要的任何js代碼,比如說'windows.location.reload();'就像maximus建議的那樣。 –

+0

比利說的是完美的。閱讀一些Ajax基礎知識將幫助您更快地學習。這裏有一個很棒的一面http://www.w3schools.com/ajax/ajax_intro.asp –