[英]Google Chrome: XMLHttpRequest.send() not working while doing POST
我正在开发一个应用程序,该应用程序允许用户使用表单(POST请求)发送文件,并在上传文件时执行一系列GET请求,以收集有关上传状态的信息。
它在IE和Firefox中可以正常工作,但在Chrome和Safari中则不能。
问题在于,即使在XMLHttpRequest对象上调用了send(),也没有请求任何内容,就像在Fiddler中看到的那样。
更具体地说,将事件处理程序放置在窗体的“ submit”事件上,该事件处理程序在窗口上放置一个超时函数调用:
window.setTimeout(startPolling, 10);
并在此函数中启动“ startPolling”序列,该序列不断触发GET请求,以从Web服务接收状态更新,该服务返回可用于更新UI的text / json。
这是基于WebKit的浏览器的限制(也许是安全性吗?)? 这是Chrome错误吗? (虽然我在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.
});
});
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.