jQuery ajax和load不会在Chrome或IE8中重复

时间:2012-03-09 15:17:00

标签: jquery google-chrome servlets loops internet-explorer-8

我发现其他线程正在讨论.load和.ajax与Chrome和IE,但没有解决我的特殊问题。

我正在使用以下代码来调用来自servlet的响应。响应应该是3行text / html,但我可以调整为text / plain。

function checkProgress(){
    $.ajax({
        type: "GET",
        url: "/myServlet",
        success: function(result) {
            $('#data').text(result);
            setTimeout(checkProgress, 2000);
        }

    });​
}

这里的想法是将值提高2秒。并以div显示。

<div id="status" style="display:none;">                
            <h3>Status</h3>                
                <p id="data"></p>
            </div>  

我遇到的问题是这只会在Chrome和IE8中加载1次。 FF将重复加载,我可以在浏览器中看到值的变化。

我见过的其他问题谈到这在Chrome和IE8中根本不起作用,但我的确有效。它只是不会重复负载。

我也尝试使用.load,因为我想维护任何HTML格式并遇到同样的问题。我现在愿意跳过格式化,这样我就可以更新了。

非常感谢任何帮助!

EDITED 再研究一下Chrome,我发现它在提交表单时会停止ajax脚本。我的页面启动了一个相当冗长的servlet。我正在使用Ajax调用从servlet返回状态更新。当我提交以启动servlet时,正在运行以报告状态的脚本在Chrome中停止。没有错误。它只是停止运行。

这看起来像Chrome中的线程问题。有没有更好的方法呢?我可以使用onsubmit事件同时启动ajax和servlet吗?

2 个答案:

答案 0 :(得分:1)

IE缓存ajax请求。如何随机添加随机字符串以使其每次都成为新请求?

将缓存属性值设置为false。所以jquery会为所有请求添加一个唯一的时间戳,所以每次都不会是缓存的响应。

function checkProgress(){

    $.ajax({
        type: "GET",
        url: "/myServlet" ,
        cache: false,
        success: function(result) {
            $('#data').text(result);
            setTimeout(checkProgress, 2000);
        }

    });​
}

答案 1 :(得分:0)

您的代码:

setTimeout(checkProgress, 2000);

将其更改为,您错过了()

setTimeout(function(){
    checkProgress();
}, 2000);