不可知的方案/协议ajax调用

时间:2015-02-20 10:40:34

标签: ajax http https xmlhttprequest xdomainrequest

我想做一个适应当前方案(http/https)的ajax调用。什么是解决这种情况的真正有效方法(xhrxdr)?

var xhr = new XMLHttpRequest(); // Or var xdr = new XDomainRequest
...
xhr.open("get", "//mydomain.com/api/v1/etc", true);
...

或者

var xhr = new XMLHttpRequest();
...
xhr.open("get", window.location.protocol + "//mydomain.com/api/v1/etc", true);
...

或者......其他什么?

注意:问题Making a protocol agnostic jquery ajax call未提及XMLHttpRequestXDomainRequest两种情况,也未提供经过验证的解决方案。

1 个答案:

答案 0 :(得分:2)

这种方法肯定不会起作用:

xhr.open("get", "//mydomain.com/api/v1/etc", true);

因为这会在相对网址上发送请求,因为此处没有协议提及。

此方法适用于XMLHttpRequest

xhr.open("get", window.location.protocol + "//mydomain.com/api/v1/etc", true);

重要提示,XDomainRequest 已过时,不应在您的应用中用作it will work only in IE 8-9

Great example of handling the various type of requests可以在这里找到:

if(window.XDomainRequest){
    if(protocol == "http:"){
        if(RequestHelper.Busy){
            setTimeout(function(){
                RequestHelper.sendRequest(url,success,$);
            },50);
        } else {
            RequestHelper.Busy = true;
            $("body").append("<iframe id="ajaxProxy" style="display: none;" src="&quot;+RequestHelper.GatewayURL+&quot;" width="320" height="240"></iframe>"); 
            $("#ajaxProxy").load(function(){ 
                ajaxProxy.postMessage(url,"*"); 
                //...
            }); 
        } 
    } else { 
        var xdr = new XDomainRequest(); 
        xdr.open("get", url); 
        //...
    } 
} else { 
    $.ajax({ 
        type: "GET", 
        url: url, 
        dataType: "html", 
        async:true, success: 
        function (response){ 
            success(response); } 
        }); 
}