指示延迟作业已完成的ajax进程

我有一个Rails 3应用程序,当用户点击页面时,它使用delayed_job获取一些数据(使用类方法)。 如何向ajax进程指示类方法已运行(以便我可以停止轮询)?

编辑:

为了澄清,我想知道delayed_job何时运行,而不是在ajax进程成功时。 然后我想将delayed_job完成状态传递给正在运行的ajax进程。

通常,执行此操作的最佳方法是在数据库中存储作业进度的指示。 例如:

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即可查看作业的进度,成功是否成功或失败。

使用此gem,您可以直接在Delayed::Job对象本身上进行跟踪: https : //github.com/GBH/delayed_job_progress

已完成的作业不再自动删除,因此您可以轮询作业,直到它返回completed状态。

如果您正在使用任何JavaScript框架(如prototypejs),那么在可选选项哈希中,您通常会提供onComplete和/或onSuccess回调。 API参考