2009-10-21 21 views
0

如何打電話或在asp.net的MVC(C#)應用程序的Global.asax的的Application_Start使javascript函數?呼叫在asp.net mvc的javascript函數從Global.asax的

+0

你想達到什麼目的? – Lazarus 2009-10-21 11:39:00

+0

javascript函數通過jquery從數據庫中獲取要顯示給用戶的數據。 javascript函數將使用setTimeout定期執行。我需要((文件)。就緒不在$)只有一次調用這個javascript函數,這樣的setTimeout將再次照顧調用它的週期性 – Prasad 2009-10-21 11:43:38

+1

哪些錯誤在$調用的setTimeout(文件)。就緒? – LiamB 2009-10-21 11:44:29

回答

1

你可以記得在會話或餅乾(這是性能爲JavaScript更容易,但更糟糕的/ etc)最後的「調用」時間,然後

function check() { 
    // or var lasttime = <%= Session["lasttime"] %>; 
    if (now - $.cookie("lasttime") > timeout) 
    { 
    $.cookie("lasttime", now); 
    performAction(); 
    } 
    window.setTimeout(check, 1000); 
} 

您可以從$一次通話時間功能(文件) 。準備()。

但是請注意,它可能需要瀏覽器幾秒鐘來渲染頁面,也可能撞到404或其他錯誤,頁面將不起作用...... JavaScript是不是做調度操作的可靠方法。

另一種方式是讓你的計時器服務器上。像上面這樣的JavaScript函數將不時要求它,傳遞用戶ID或類似的東西。這將防止頁面重新加載期間定時器重置。但你必須經常請求。所以最好的解決辦法是將兩種技術結合起來:在服務器

  1. 運行定時器
  2. 當頁面呈現,設定VAR inited = FALSE;
  3. 運行功能之上,但這樣的:如果定時器= $ .getJSON( 「/定時器的uid = X?」);(inited!)並且當您擁有精確的當前計時器時,只需繼續使用JavaScript即可,無需服務器請求。
+0

我喜歡並同意此答案。如果目標是防止某些javascript函數每分鐘被多次調用一次,而無論用戶在那段時間內點擊了多少個獨立頁面,那麼讓javascript負責(通過cookie,如圖所示)以便跟蹤時間它最後運行是最有意義的。當然,你可以使用一個會話變量(它很可能依賴於cookies),但是你最終會注入到腳本中。唯一我不確定的是,你的評論是在javascript cookies中做這件事情對性能來說更糟? – Funka 2009-10-22 03:07:58

+0

實際上,唯一需要注意的可能是用戶打開了多個選項卡/窗口,以確保它們並非全部都在競爭計時器! – Funka 2009-10-22 03:18:18

+0

每個請求都會發送Cookie,即使是靜態文件也是如此。是的會話依賴於cookie(通常),但只有一個;如果添加更多,則會增加流量。用戶可以關閉cookies。至於多頁面,這是結合了客戶端 - 服務器解決方案的理由,因爲在服務器上總是會有單個的定時器實例 - 可以聯繫一次或定期檢查計時器。 – queen3 2009-10-22 10:35:22

0

「JavaScript函數得到的數據被示出爲從數據庫通過jquery的用戶。JavaScript函數將週期性地使用的setTimeout執行」

這不會是做到這一點的地方。

你有沒有想過用你的母版?

+0

我現在在主頁面中使用此調用。但每次我導航到其他頁面時,它都會重置間隔。說我需要調用js函數每隔1分鐘,當我從第一個到第二個頁面瀏覽,時間間隔被重置,我需要等待該頁面1分鐘的js函數獲取調用 – Prasad 2009-10-21 11:46:26

+0

這就是網絡的性質。每個頁面都是獨立的。順便說一句,如果我是你,我會使用會話來跟蹤用戶在頁面上出現的時間。然後使用一些邏輯來檢查當前時間與會話時間,然後如果它違反了1分鐘輸出警報腳本(或任何你喜歡的) – LiamB 2009-10-21 11:53:24

+0

你應該在$(document).ready中調用函數一次)並且還通過setTimeout。然後它在第二個1和60/120/180 – 2009-10-21 13:20:37

0

由於JavaScript的在客戶端和Global.asax的執行執行服務器端。你不能這樣做。

+0

我認爲他正在尋找一種方法將它轉儲到頁面上,有點像RegisterClientScript – LiamB 2009-10-21 11:45:18

+0

@Pino,他說他想在問題和評論中都調用JS函數。 – 2009-10-21 11:46:50

+0

是的。完全像常規asp.net中的RegisterClientScript。 – Prasad 2009-10-21 11:47:28

0

您如何檢查着陸頁負載時的應用程序級別變量(主頁面也會這樣做)並在其中註冊任何javascript並設置變量。

如果變量設置,您可以跳過註冊。