Cordova,ajax跨域调用使用jQuery但不使用XMLHttpRequest

时间:2015-02-10 13:02:40

标签: ajax cordova xmlhttprequest cors web-worker

我的config.xml具有" Domain Access"设置为" *"。 我无法更改远程服务器的标头(它是硬件设备)。 我的跨域jQuery.ajax调用运行良好。 但是,如果我使用XMLHttpRequest进行相同的调用,他们就无法工作! (我将从jQuery切换到XHR,因为我需要将ajax放入Web worker中。)

我正在使用此功能:

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);
}

1 个答案:

答案 0 :(得分:0)

我的猜测(由于缺乏关于如何,确切地说它不起作用的详细信息)是因为你将工作者加载为Blob(我想从Blob中使用createObjectURL并传递输出到Worker构造函数),无论是否有任何头文件,CORS都会失败,因为它没有为blob:协议启用。

尝试通过http(s)将工作人员作为单独的文件加载,看看会发生什么。