我有一个代理上传一个火灾到亚马逊S3服务器。此代理使用NodeJS完成,我的网页托管在Tomcat服务器上。因此,为了进行Xhr上传,我必须使用Nginx来解决跨域问题,因为两台服务器都在同一台机器上。Xhr上传支持跨域请求
但是使用Nginx有很多问题,所以我的老板问我是否可以使用跨域策略来做同样的事情。我做到了,但那是我无法做到的一些事情。这里是我的代码:
var xhr = new XMLHttpRequest();
xhr.onreadystatechange = function(e) {};
xhr.open('POST', self.basePath + '/upload' + file.name, true, null, null, null, true, true);
xhr.setRequestHeader("Accept", "application/json, text/javascript, */*; q=0.01");
xhr.setRequestHeader("Connection", "close");
xhr.sendAsBinary(file.getAsBinary());
这个工作在一个跨域请求到达与文件服务器和返回响应,但是当我尝试设置这样的进度事件:
var xhr = new XMLHttpRequest();
xhr.onreadystatechange = function(e) {};
xhr.upload.onprogress = function(){console.info('on progress');};
xhr.open('POST', self.basePath + '/upload' + file.name, true, null, null, null, true, true);
xhr.setRequestHeader("Accept", "application/json, text/javascript, */*; q=0.01");
xhr.setRequestHeader("Connection", "close");
xhr.sendAsBinary(file.getAsBinary());
的跨域请求未被触发(请求使用“OPTIONS”方法而不是POST,并且它永远不会到达服务器)。但是,正如您可能认为的那样,我需要进度事件才能将其展示给用户。有谁知道发生了什么?
Ps:上述所有代码完全适用于“同一域名”请求。 Ps2:我试过xhr.onprogress,但它永远不会被解雇(在交叉或相同的域请求) Ps3:我试过FF4 +和Chrome 12+
谢谢你很多。 Thiago