2011-07-21 55 views
1

我想單擊頁面上的div來運行一定數量的javascript任務,但也要在控制器上運行一個操作。爲了更詳細地解釋:Jquery&Rails 3:從js文件運行控制器操作?

我有我已經放了一堆的jQuery的代碼untitled.js文件:

$(function(){ 
$('nav li').hover(function(){ 
     $(this).addClass("bigger", 50); 
    }, function(){ 
     $(this).removeClass("bigger", 50); 
}); 

$('#notify').click(function(){ 
     $('.notifications').show(); 
}); 

$('#notify').click(function(){ 
     (some code to run a controller action) 
}); 


}); 

我想上運行,被稱爲「run_tasks」的控制器動作「用戶「控制器,當點擊#notify按鈕時,以及顯示通知類。正如你在上面的代碼中看到的那樣,我有jquery代碼來顯示.notifications,但是我不知道該如何放置「(某些代碼來運行控制器操作)」。爲了提供有關控制器操作的信息,它只會運行我想運行的一些任務,它不會重定向到新頁面或任何其他任務。下面是用戶控制的基本格式:

class UsersController < ApplicationController 
     .... 
     def run_tasks 

     end 
end 

就是我試圖做的可能,如果是什麼jQuery代碼做我把在那裏?我使用Rails 3.0.9和最新的jQuery。

回答

5

只要你有一個控制器動作的路由,你可以通過簡單地向jQuery的$.get()發出一個ajax請求來讓它運行。

$('#notify').click(function(){ 
    $('.notifications').show(); 
    $.get('/users/run_tasks'); 
}); 

有沒有必要做兩$('#notify').click()要麼,你可以把兩個語句在一個塊(如我的代碼片段做了以上)。

請注意,在這種情況下,.get()只是請求調用服務器上的控制器操作並忽略結果,但您也可以使用它來處理由控制器返回的數據。請參閱上面的文檔鏈接。

+0

我還會考慮使用代替硬編碼URL的塊。像<%= url_for(:action =>'run_tasks',:controller =>'users'%>(對不起,沒有一個例子在我面前)。這將允許你移動應用程序而不必修改 – Tom

+0

有趣 - 不應該使用'/ users/run_tasks'路由到相同的控制器/動作,而不管應用程序的位置(本地主機還是在線)?另外,你的代碼也可以工作,除非它失敗,因爲控制器把run_tasks作爲一個變量,它應該讀取一個用戶id,而不是一個控制器動作的引用。爲什麼這是? – jay

+0

- 找出了使用你的代碼的替代解決方案。感謝所有的幫助! – jay

相關問題