Javascript Google Chrome:XMLHttpRequest.send()在执行POST时不工作
我正在开发一个应用程序,它允许用户使用表单(POST请求)发送一个文件,并在上载该文件时执行一系列GET请求,以收集有关上载状态的信息 它在IE和Firefox中工作得很好,但在Chrome和Safari中就没那么好了 问题是,即使在XMLHttpRequest对象上调用send(),也没有像在Fiddler中看到的那样请求任何内容 更具体地说,事件处理程序放置在表单的“提交”事件上,该事件在窗口上放置超时函数调用:Javascript Google Chrome:XMLHttpRequest.send()在执行POST时不工作,javascript,ajax,google-chrome,Javascript,Ajax,Google Chrome,我正在开发一个应用程序,它允许用户使用表单(POST请求)发送一个文件,并在上载该文件时执行一系列GET请求,以收集有关上载状态的信息 它在IE和Firefox中工作得很好,但在Chrome和Safari中就没那么好了 问题是,即使在XMLHttpRequest对象上调用send(),也没有像在Fiddler中看到的那样请求任何内容 更具体地说,事件处理程序放置在表单的“提交”事件上,该事件在窗口上放置超时函数调用: window.setTimeout(startPolling, 10); 在
window.setTimeout(startPolling, 10);
在这个函数中,启动“startPolling”序列,该序列不断触发GET请求,以接收来自web服务的状态更新,该web服务返回可用于更新UI的文本/json
这是基于WebKit的浏览器的限制吗(可能是安全方面的限制)?这是一个Chrome bug吗?(不过,我在Safari中看到了同样的行为)。我遇到了完全相同的问题。目前,我使用一个iframe,它是表单中的目标。这允许在发布时执行xhr请求。虽然这确实有效,但如果有人禁用javascript,它不会优雅地降级(如果没有js,我无法在iframe之外加载下一个页面),因此如果有人有更好的解决方案,我将不胜感激 以下是jQuery脚本供参考:
$(function() {
$('form[enctype=multipart/form-data]').submit(function(){
// Prevent multiple submits
if ($.data(this, 'submitted')) return false;
var freq = 500; // freqency of update in ms
var progress_url = '{% url checker_progress %}'; // ajax view serving progress info
$("#progressbar").progressbar({
value: 0
});
$("#progress").overlay({
top: 272,
api: true,
closeOnClick: false,
closeOnEsc: false,
expose: {
color: '#333',
loadSpeed: 1000,
opacity: 0.9
},
}).load();
// Update progress bar
function update_progress_info() {
$.getJSON(progress_url, {}, function(data, status){
if (data) {
var progresse = parseInt(data.progress);
$('#progressbar div').animate({width: progresse + '%' },{ queue:'false', duration:500, easing:"swing" });
}
window.setTimeout(update_progress_info, freq);
});
};
window.setTimeout(update_progress_info, freq);
$.data(this, 'submitted', true); // mark form as submitted.
});
});
我从来没有听说过。在Chrome中,其他基于AJAX的上传进度指示器对我来说还可以。让我们再编写一些代码/测试用例。它会在发送下一个轮询请求之前等待上一个轮询请求完成吗?它会。处理一个请求会触发下一个请求的新setTimeout。不过,除了邮局,没有人出去。