IE8问题与javascript函数在setTimeout中调用自身

时间:2011-02-04 19:52:36

标签: javascript internet-explorer settimeout

我有一个在javascript中定义的定位函数

var locID;

function locateMe()
{
    if(locID > 0)
    {
        // i do a jquery post here
    }

    setTimeout(locateMe, 2000);
} 

// my document ready function is here, and inside it, at the end of it
// i do this
locID = 0;
locateMe();

当我在firefox中测试此代码时,每两秒调用一次locateMe函数并按预期工作。当我在IE8中测试代码时,函数永远不会被调用(至少它看起来永远不会被我使用IE的开发人员工具看到)

注意:在“zone_row”类的click事件处理程序中定义了修改locID的代码。再次,在Firefox中一切都按预期工作。奇怪的是,在IE中点击zone_row时,函数将被称为ONCE。我可以看到开发人员工具和jquery帖子的操作结果。

我认为IE中只有一些我不熟悉的异常情况。我做错了什么?

编辑:已更改“locateMe();”在setTimeout调用中找到我。

更新:添加更多我的代码(评论中的每个请求)以显示展示位置(尽管代码不比我的第一篇文章多得多)。

<script type="text/javascript">
    var z_items;
    var locID;

    function locateMe()
    {
            if(locID > 0)
            {
                    // my jquery post is here                   
            }   

            setTimeout(locateMe, 2000);
    }

    $(document).ready(function()
    {
            // ... some click events and get requests here ...

            locID = 0;
            locateMe();
    });
</script>

我也尝试在setTimeout中包装调用(没有效果)并更改DOCTYPE(这实际上导致IE从不调用函数,而不是现在它调用ONCE而不再调用它)。

3 个答案:

答案 0 :(得分:2)

问题解决了。我从这篇文章中找到了另一个问题的答案:

Prevent browser caching of jQuery AJAX call result

添加$ .ajaxSetup({cache:false});对于我的文档就绪功能,它也解决了这个问题。它看起来像是一个缓存问题。

答案 1 :(得分:1)

我发现对于IE(甚至是IE9),如果你将自调用函数嵌套在匿名函数中,它就可以工作。但看起来Toddeman的问题确实与ajax部分有关。

所以代码是:

function locateMe()
{
    /* ... */   

    //IE way (still works in Chrome and FF):
    setTimeout(function () { locateMe(); }, 2000);

    //original: setTimeout(locateMe, 2000);
}

答案 2 :(得分:0)

使用

setTimeout( locateMe, 2000 );