2012-03-19 87 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