【发布时间】:2012-02-07 17:24:59
【问题描述】:
大家好,我有这个代码:
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;
}
}
此外,我的服务器使用 200 和 Access-Control-Allow-Origin 响应对 upload.aspx 的初始 OPTIONS 请求:* 然后发生第二个请求 POST
一切似乎都已经到位,它在 FireFox 上运行良好,但在 G Chrome 上,updateProgress 处理程序没有被调用,而是只调用一次,然后 lengthComputable 为 false。
我需要 Access-Control-Allow-Origin: * 因为这是一个跨域调用,脚本父级是与 upload.aspx 域不同的服务器上的资源
任何人都可以给我一些线索,提示,请帮助?这是 G Chrome 的已知问题吗?
谢谢! 卵子
【问题讨论】:
-
当它不是 CORS 时这是否有效?如果确实如此,则在 crbug.com/new 上引发错误
-
对于环顾四周的人,如果 xhr 进度事件已将
evt.lengthComputable设置为 false,则可能会完全跳过func updateProgress的 eval 正文。我不太确定是什么决定了这种行为,但它似乎发生在请求中的一小块小交换中。您可以通过检查事件处理程序position和loaded属性轻松检查{在同一功能} 完成(仅)。 (顺便说一句,这种语法(很可能)与 jquery 的最新迭代不兼容。) -
既然使用的是绝对网址,不应该以“http://”开头吗?
-
我对进度事件有类似的问题:stackoverflow.com/questions/48679979/…
标签: javascript security google-chrome xmlhttprequest updateprogress