Cordova,ajax跨域调用使用jQuery工作,但不使用XMLHttpRequest
My config.xml的“域访问”设置为“*”。 我无法更改远程服务器的头(这是一个硬件设备)。 我的跨域jQuery.ajax调用运行良好。 但是如果我使用XMLHttpRequest进行相同的调用,它们就不起作用了!(我正在从jQuery切换到XHR,因为我需要将ajax放入web worker中) 我正在使用这个函数:Cordova,ajax跨域调用使用jQuery工作,但不使用XMLHttpRequest,ajax,cordova,xmlhttprequest,cors,web-worker,Ajax,Cordova,Xmlhttprequest,Cors,Web Worker,My config.xml的“域访问”设置为“*”。 我无法更改远程服务器的头(这是一个硬件设备)。 我的跨域jQuery.ajax调用运行良好。 但是如果我使用XMLHttpRequest进行相同的调用,它们就不起作用了!(我正在从jQuery切换到XHR,因为我需要将ajax放入web worker中) 我正在使用这个函数: myapp.ajax=function(){ var o = arguments[0]||{}, url = o.url||null,
myapp.ajax=function(){
var o = arguments[0]||{},
url = o.url||null,
cache = o.cache||true,
timeout = o.timeout||0,
callback = arguments[1]||function(){}
;
if(!url)return null;
var myRequest = new XMLHttpRequest();
myRequest.timeout = timeout;
var urlToCall=url;
if(!cache){
urlToCall += urlToCall.indexOf('?')==-1 ? '?' : '&' ;
urlToCall += '_=' + Date.now() ;
}
myRequest.onreadystatechange=function() {
if (myRequest.readyState == 4) {
if (myRequest.status == 200) {
callback(myRequest.responseText,'success',myRequest);
} else {
callback(myRequest,'error',myRequest.statusText);
}
}
}
myRequest.open("GET",urlToCall,true);
myRequest.setRequestHeader("Access-Control-Allow-Origin", "*");
myRequest.setRequestHeader("Access-Control-Allow-Headers", "Origin, X-Requested-With, Content-Type, Accept");
myRequest.setRequestHeader("Access-Control-Allow-Methods","POST, GET, OPTIONS, DELETE, PUT, HEAD");
myRequest.send(null);
}
我的猜测是(由于缺乏关于它到底是如何工作的详细信息),因为您正在将worker作为Blob加载(我猜使用Blob中的createObjectURL
,并将输出传递给worker
构造函数),所以CORS将失败,而不管有什么头,因为它没有为Blob:
协议启用
尝试通过http将worker作为一个单独的文件加载,看看会发生什么