我想做一个适应当前方案(http/https
)的ajax调用。什么是解决这种情况的真正有效方法(xhr
和xdr
)?
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未提及XMLHttpRequest
和XDomainRequest
两种情况,也未提供经过验证的解决方案。
答案 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=""+RequestHelper.GatewayURL+"" 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); }
});
}