我发现其他线程正在讨论.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吗?
答案 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);