Wtf IE7 - 使用setTimeout调用AJAX

时间:2009-02-26 22:57:59

标签: javascript jquery ajax internet-explorer

我在Firefox,Opera和Seamonkey上测试了这个。它工作正常。说到Internet Explorer 7.它可以工作但是达到某一点。我每隔几秒钟就会对PHP脚本进行一次AJAX调用。在IE7中,它进行第一次AJAX调用并检索数据,但它不会再次执行。即使我在else块中有一个setTimeout函数。 为什么? :(

startTime = setTimeout('getStatus()', 5000); 

}//function convertNow

function getStatus() {

    $.ajax({
    type: "GET",
    url: "fileReader.php",
    data: 'textFile=' + fileNameTxt,
    success: function(respomse){
    textFileResponse = respomse.split(" ");
    $("#done").html("Downloading & Converting Video...<b style='font-size:17px;color:green;'>" + textFileResponse[0] + "</b><br /><b>" + properFileName + '</b>');
    }
    });//ajax

    if(textFileResponse[0]=='100.0%'){

    }
    else{       
    continueTime = setTimeout('getStatus();', 3000); 
        alert('call end');
    }

}

道歉,如果有任何挫折感来自这个问题。在过去的3个小时里,我像无头鸡一样跑来跑去。

感谢您的帮助。

编辑2

我添加了完整的功能。 setTimeout似乎正常工作。它必须是AJAX调用,我只是检查返回的内容。更奇怪!它不断从AJAX请求中返回相同的值,并且没有获得任何更新的值!我认为答案2可能有一些东西。它可能是由于缓存,但你怎么过来?

4 个答案:

答案 0 :(得分:4)

您是否通过HTTP GET请求ajax调用而不是HTTP POST? IE倾向于使用ajax调用的缓存结果,除非你使用POST而不是GET。

编辑:既然你已经更新了你的问题,我可以看到你确实在使用GET动词。将其更改为POST,我打赌您的问题将得到解决。

答案 1 :(得分:1)

完全不确定,但是你错过了;

从:

setTimeout('getStatus()', 3000); 

为:

setTimeout('getStatus();', 3000); 

答案 2 :(得分:1)

您仍然可以使用GET请求,只需添加

即可
cache: false

到$ .ajax请求。

答案 3 :(得分:0)

我注意到textFileResponse是在AJAX调用的成功处理程序的函数声明中设置的,但在进行AJAX调用后立即引用为数组。也许在IE 7中,成功处理程序在数组引用之前没有完成,这会引发java脚本错误,因此setTimeout永远不会运行。