2012-03-19 91 views
3

我的setTimeout函數不想工作。我沒有收到任何警報,所以我假設我做了一件非常愚蠢的事情。setTimeout沒有執行

var timeout = 1000; 
for(k=0;k<pages.length;k++) 
{ 
    randomnumber=Math.floor(Math.random()*pages[k].length); 
    setTimeout(function() { 
     $.ajax({ 
      type: 'GET', 
      url: pages[k][randomnumber], 
      success: function(data) { 
       alert(data); 
       if(data.indexOf('VIDEO_LENGTH') > 0) 
       { 
        timeouttext = data.substr(data.indexOf('VIDEO_LENGTH')+12); 
        timeouttext = timeouttext.substr(timeouttext.indexOf('.')); 
        timeout = parseInt(timeouttext); 
        alert(timeout); 
       } 
       else 
        timeout = 1000; 
       $('#loader').hide('fast','fade'); 
       $('#information').html(data); 
       $('#information').show('fast','fade'); 
      } 
     }) 
    },timeout); 
    alert("PAGE " + k + " RandomNumber " + randomnumber + " : " + pages[k][randomnumber]); 
    if(k==3) { 
     k = 0; 
    } 
} 

任何人都可以幫助我。

+0

當您發佈問題時,並且您引用諸如「數據」之類的內容。它總是有用的發佈什麼樣的數據看起來像... – Nix 2012-03-19 12:28:33

+0

數據是一個簡單的文本/ HTML文件,加載與Ajax請求。 – Albert 2012-03-19 12:45:51

回答

2

編輯:確定關注錯誤:

var k當您調用頁面url不符合預期。因此,嘗試:

{ 
    randomnumber=Math.floor(Math.random()*pages[k].length); 
    var selectedIndex = k; // store current k 
    setTimeout(function() { 

    $.ajax({ 
     type: 'GET', 
     url: pages[selectedIndex][randomnumber], // use stored k 
... 
+0

如果速記不需要parens。 – Christoph 2012-03-19 13:02:32

+0

是的......但是如果他關閉它,我想他要打開它:)但是有一個奇數的圓括號 – 2012-03-19 13:11:30

+0

是真的,我的錯。編輯你的答案PLZ,所以我可以復職。 – Christoph 2012-03-19 13:15:12

1

當您使用FireBug或CHrome的開發人員工具調試代碼時,是否會看到您的Ajax請求?

它看起來像我從來沒有得到每個請求的「成功」事件。由於您的Ajax請求中沒有「錯誤」事件,因此您從未看到任何反饋。

1

你的setTimeout是正確的。要進一步檢查錯誤:

  1. 檢查控制檯是否正在發送您的請求。

  2. add error: function(){}complete:function(){}塊會記錄請求的狀態,看看你的服務器端是否打破了你的代碼。

編輯:(我建議你不要使用簡寫if,這是非常容易出錯

+0

我在LastCoder的回答後添加了一個錯誤塊。我從中得不到迴應。 AFAIK,請求正在發送(根據控制檯) – Albert 2012-03-19 13:14:17

+0

更正你的if條件丟失的'{'(檢查控制檯是否提示任何錯誤),並根據[ajax-Docs]添加一個'console.log() ](http://api.jquery.com/jQuery.ajax/)在完整或錯誤塊中查看,返回哪個狀態。 – Christoph 2012-03-19 13:18:32

0

試試這個(更新fiddle here

var funfacts= ['URL1','URL2','URL3']; 
var multimedia= ['URL4','URL5']; 
var employees = ['URL6','URL7','URL8','URL9','URL10']; 
var information = ['URL11','URL12','URL13']; 

var pages = [funfacts, multimedia, employees, information]; 
var timeout=1000; 
var t=0; 
for(i=0;i<pages.length;i++) 
{ 
    (function(value){ 
     for(j=0;j<pages[value].length;j++) 
     { 
      t++; 
      (function(iv, ij){ 
       var tmo = timeout*t; 
       setTimeout(function(){ 
        callAjax(iv, ij); 
       }, tmo); 

      })(value, j); 
     } 

    })(i);    
} 

function callAjax(i, j) 
{ 
    $.ajax({ 
     type: 'GET', 
     url: pages[i][j], 
     success: function(data) {  
      if(data.indexOf('VIDEO_LENGTH') > 0) // indexOf should be checked if(var.indexOf('sometext')!=-1) 
      { 
       // your code 
      } 
      else 
      { 
       // your code 
      } 
     } 
    }); 
} 

如果一切。否則是好的,那麼它應該工作。

你也可以閱讀thisthis在SO上。

+0

感謝您的回答。你的是迄今爲止效果最好的一個。但是我仍然有一個問題,在ajax調用之間沒有停頓。我的控制檯顯示的:'GET HTTP://localhost/info_screens/content/funfacts/0.html GET HTTP://localhost/info_screens/content/multimedia/0.html GET HTTP://本地主機/ info_screens /內容/employees/0.html GET http:// localhost/info_screens/content/information/0.html'但是其中沒有任何暫停。 – Albert 2012-03-19 14:51:10

+0

剛上'如果(data.indexOf評論...'注:我知道一個事實,即''VIDEO_LENGTH''絕不會在0。雖然我知道這個位置,它仍然不是一個好的編碼習慣,所以我改變了它謝謝指點出來 – Albert 2012-03-19 14:55:37

+0

哎呀我犯了一個錯誤, 「K」 應該是 「我」,網址:。頁[k]的[randomnumber]應該是網址:頁[I] [randomnumber] – 2012-03-19 15:52:43