2011-06-07 73 views
0

我正在尋找一種方法來獲得一個.getJSON,調用另一個函數,該函數會進行另一個.getJSON調用。嵌套的JSON GET函數

我在我的控制器上迭代調用一個JSON方法,並希望完成這個迭代週期,如果滿足某些條件。如果滿足這個條件(只能從JSON方法中檢查),我想調用Controller上的另一個JSON方法(保留一些數據等)。

但是,第二次JSON調用從來沒有發生過。當我在第一個功能之外手動呼叫第二個功能時,呼叫就會正確進行。

任何暗示,或者是我的設計完全有缺陷?

編輯

Chyeaah ..忘了代碼..:d

<script type="text/javascript"> 
    $(window).load(function() { 
     var poller = setInterval(tick, 1000); 
    }); 
    function tick() { 
     $.getJSON("votingtick", function(voting) { 
      if (voting != null) { 
       if (voting.timeleft < 0) { 
        clearInterval(poller); 
        finalize(); 
       } else { 
        $("#timeout").text(voting.timeleft); 
        $("#voters").text(voting.votingCount); 
       } 
      } 
     }); 
    } 
    function finalize() { 
     $.getJSON("votingend", function(voting) { 
      if (voting != null) { 
       $("#finished").fadeIn('fast'); 
      } 
     }); 
    } 
</script> 

認爲這是最相關的,不是嗎?

+0

什麼是你的代碼? (它看起來像什麼?你可以創建一個http://jsfiddle.net的例子嗎?) – Neal 2011-06-07 16:54:49

+0

不能做一個jsfiddle的例子 - 服務器只能在本地訪問。這不是一個高效的環境。然而我更新了我的問題。在此先感謝 – chzbrgla 2011-06-07 16:57:36

+1

你嘗試輸出'投票',看看它是否包含任何東西? – Neal 2011-06-07 16:59:13

回答

1

我懷疑你的輪詢變量有一個範圍問題。它可能只在您的$(window).load功能中定義,而不在其他地方。所以當瀏覽器試圖執行clearInterval時,會引發異常並且腳本被中止。您可以通過使用try catch來圍繞$.getJSON函數中的代碼進行驗證。

如果您刪除該函數中的var關鍵字,則輪詢器將成爲一個全局變量,您可以在腳本中的任何位置引用該變量。

+0

它_does_實際上停止間隔:)所以我不認爲有問題。不管怎麼說,多謝拉!欣賞它。 – chzbrgla 2011-06-07 17:04:54

+0

argh ..愚蠢的我。它不停止間隔..腳本停止,因爲例外..嗯 - 最有可能的問題在這裏:) – chzbrgla 2011-06-07 17:12:21

+0

呵呵:)我正準備發佈一個jsfiddle來證明你錯了;)很高興看到你明白了它。 – villecoder 2011-06-07 17:14:02

1

這可能是因爲您在調用clearInterval時出現錯誤,並顯示未定義的值。您在load事件處理程序中本地聲明變量poller,因此它在外部未定義。

聲明它的功能外:

var poller; 
$(window).load(function() { 
    poller = setInterval(tick, 1000); 
});