解决方案不起作用
在浪费了一整天学习前端 Web 开发之后,我将进度条放入 iframe 中,该 iframe 在 jquery 对话框内启动,期望 ajax get 请求从该页面开始工作。不幸的是我收到了完全相同的行为。
发现问题
当您按“继续”时,将提交一个表单。一旦完成此操作并将请求发送到服务器,它就会阻止所有其他 ajax 调用工作。似乎是 webkit 中的一个错误,目前没有建议的解决方案:
https://bugs.webkit.org/show_bug.cgi?id=23933 https://bugs.webkit.org/show_bug.cgi?id=23933
我有以下代码:
$(document).everyTime("3s", function() {
$.get('uploadProgressServlet.jsp', {queue : 'parse'}, function(data){
<!-- Do something -->
}
});
这在 ie 和 firefox 中工作得很好,但是当我在 chrome 中调试时,我点击了 $.get 方法,但从来没有点击内部函数,然后当我查看 get 选项卡时,我看不到任何发送到服务器的 httprequest。你应该知道我不是前端 Web 开发人员,所以可能会遗漏一些非常明显的东西。
Edit
这是我的所有代码。看起来一切都按其应有的方式运行,但是一旦我撤消 $('continue').click 的注释...我只看到对话框出现,没有任何请求发送到服务器,并且控制台中没有错误。
var lock = false;
var processing = false;
//$('#continue').click(function(){
$('#dialog').dialog({
modal : true,
closeOnEscape : false,
open: function() {
$('#queueDiv').hide();
$('#progressDiv').hide();
$(".ui-dialog-titlebar-close").hide();
//Poll place in the queue every seconds
$(document).everyTime("1s", function() {
if(!lock) {
lock = true;
if(!processing) {
$.get('uploadProgressServlet.jsp', {queue : 'parse'}, function(data){
$('#queueDiv').show();
$('#queuePlace').replaceWith(data);
if(data <= 0) {
processing = true;
$('#queueDiv').hide();
$('#progressDiv').show();
$('#progressBar').progressbar({
value: 0
});
}
});
}
else {
$.get('uploadProgressServlet.jsp', {process : 'parse'}, function(data){
$('#progressBar').progressbar({
value: parseInt(data == -1 ? 0 : data)
});
});
}
lock = false;
}
});
}});
});
// });
因此,如果 click 方法不处于活动状态,则会向服务器发送请求并收到响应,说明进程是否在队列中。当确定不在队列中时,会出现进度条的动画,该动画会轮询后端的进度,并根据完成的百分比自行递增。
当单击处于活动状态时,在调用时会出现一个没有内容的对话框,并且调试后端显示会再次收到新请求。控制台中没有错误。
Edit
事实证明这是 webkit 的问题,而不是 chrome 的问题。