setTimeout没有执行

时间:2012-03-19 12:26:08

标签: javascript

我的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;
    }
}

任何人都可以帮助我。

4 个答案:

答案 0 :(得分:2)

编辑:确定关注错误:

调用页面url时的var k与预期不符。所以试试:

{
    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
 ...

答案 1 :(得分:1)

使用FireBug或CHrome的开发人员工具调试代码时,您是否看到了Ajax请求?

在我看来,对于每个请求,您都没有进入“成功”事件。由于您的Ajax请求中没有“错误”事件,因此您永远不会看到任何反馈。

答案 2 :(得分:1)

你的setTimeout是正确的。要进一步检查错误:

  1. 检查控制台是否正在发送您的请求。

  2. 添加记录请求状态的error: function(){}complete:function(){}块,以查看服务器端是否破坏了您的代码。

  3. 编辑:(我建议你不要使用速记if,这很容易出错。

答案 3 :(得分: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
            }
        }
    });
}

如果其他一切都很好,那么它应该有用。

您还可以在SO上阅读thisthis