2011-02-18 58 views
8

我有一個Rails應用程序3使用的delayed_job當用戶點擊網頁中抓取一些數據(一類方法)一個Ajax過程。 如何向ajax過程指示類方法已運行(以便我可以停止輪詢)?指示該延遲作業已完成

編輯:

爲了澄清,我希望在delayed_job的已經跑就知道了,當AJAX過程已經成功。然後我想將delayed_job完成狀態傳遞給正在運行的ajax進程。

回答

11

通常情況下,要做到這一點的最好辦法是存儲在數據庫中,作業進度的指示。例如:

class User 
    def perform_calculation 
    begin 
     self.update_attributes :calculation_status => 'started' 
     do_something_complex 
     self.update_attributes :calculation_status => 'success' 
    rescue Exception => e 
     self.update_attributes :calculation_status => 'error' 
    end 
    end 
end 

這樣當你排隊的工作:

User.update_attributes :calculation_status => 'enqueued' 
User.send_later :perform_calculation 

可以查詢,在你的控制器中,作業的狀態:

def check_status 
    @user = User.find(params[:id]) 
    render :json => @user.calculation_status 
end 

您輪詢AJAX過程然後可以簡單地調用check_status來查看工作進展情況,成功情況或失敗情況。

+0

潘是男人!謝謝你,這很有魅力。好主意。 – 2011-11-08 16:38:56

-2

如果您使用的是像prototypejs任何JavaScript框架,然後在可選選項哈希,你通常提供的onComplete和/或回調的onSuccess。 API Reference

+1

但是,無論因爲工作剛剛入伍,這個電話會不會成功? – lightyrs 2011-02-18 14:25:25