大家好,我有这段代码:
function test()
{
req = new XMLHttpRequest();
req.upload.addEventListener("progress", updateProgress, false);
req.addEventListener("readystatechange", updateProgress, false);
req.addEventListener("error", uploadFailed, false);
req.addEventListener("abort", uploadCanceled, false);
var data = generateRandomData(currentPayloadId);
totalSize = data.length;
req.open("POST", "www.mydomain.com/upload.aspx");
start = (new Date()).getTime();
req.send(data);
}
function updateProgress(evt)
{
if (evt.lengthComputable) {
total = totalSize = evt.total;
loaded = evt.loaded;
}
else {
total = loaded = totalSize;
}
}
同时,我的服务器对于上传.aspx的初始OPTIONS请求做出200的响应,并添加Access-Control-Allow-Origin: *,然后发生第二个POST请求。
在FireFox上一切都很顺利,但在G Chrome上,updateProgress处理程序仅被调用一次,然后lengthComputable为false。
我需要Access-Control-Allow-Origin: *,因为这是一个跨域调用,脚本父级资源与upload.aspx域不同步。
有人可以给我一些线索、提示或帮助吗?这是G Chrome已知的问题吗?
谢谢! Ova
evt.lengthComputable
设置为false,则可以完全跳过func updateProgress
的eval体。我不太确定是什么决定了这种行为,但它似乎发生在请求中的单块小交换中。您可以通过检查事件处理程序的position
和loaded
属性(仅)轻松检查{在同一函数中}完成情况。 (顺便说一句,这种语法可能与最新版本的jquery不兼容。) - Cristian Cavalli