2014-06-10 91 views
0

朋友,使用石英觸發Javascript popup

我正在研究一個Grails應用程序。這個應用程序有一個提醒功能,我希望Grails定期檢查是否有打開的提醒。這是使用Quartz插件完成的。如果找到了打開的提醒,我想顯示一個彈出窗口(使用Javascript提醒)。這個怎麼用?

這是我現在有:

工作

class checkRemindersJob { 

    HomeController myHome = new HomeController() 

    static triggers = { cron name: 'myTrigger', cronExpression: "0 * * ? * *" } 

    def execute() { 
     myHome.checkReminder() 
    } 
} 

控制器主頁

def checkReminder(){ 

    def myRem = Reminders.findAllBy... 
    if(myRem.size > 0) triggerReminders(myRem) 
} 

def triggerReminders(ArrayList myRem){ 

    for(x in myRem) { 
     if(...) triggerPopup() 
    } 
} 

def triggerPopup(){ 
    ???? 
} 

回答

1

您的方法無法正常工作,因爲您無法從Quartz作業中觸發JavaScript。另外,你的Quartz作業正在實例化和調用一個控制器動作,這是不推薦的(並且不太可能)。

相反,請嘗試以下

  • 使用JavaScript setInterval()功能重複做一個Ajax請求HomeController.checkReminder
  • 這個動作應該以JSON格式返回
  • AJAX請求的回調提醒數據應讀取提醒數據,並顯示彈出如果有打開提醒
+0

來得晚,但:謝謝,那工作:-) – holgrich

1

這聽起來像你可以使用一個輕量級的REST API攻擊這個挑戰,在JavaScript中執行計時:

  • Grails的應用程序有一個提醒,它暴露的REST資源在客戶端上
  • 的JavaScript定期調用REST資源,並更新本地列表
  • 的JS觸發如果列表更改UI事件。

這樣你就有了客戶端輪詢你的服務器,遵循標準模型的普通Web請求。

如果您希望Grails服務器將消息推送到客戶端,您需要查看像WebRTC或WebSockets這樣的技術,這樣可以保持雙向通道的打開狀態,但這聽起來像是您想要實現的目標的矯枉過正。