处理此问题的一种方法是检测进行跨域 AJAX 调用所固有的页面加载失败并尝试更改协议。AJAX 和页面转换无法使用这种方法,但是,它可以防止您在网站上乱扔data-ajax=false
属性。这适用于两个方向(即往返HTTPS)。
$(document).bind("pageloadfailed", function (event, data) {
// Let the framework know we're going to handle things.
event.preventDefault();
// Attempt to change protocols
window.location.href = data.absUrl.indexOf('https://') > -1 ?
data.absUrl.replace('https://', 'http://') :
data.absUrl.replace('http://', 'https://');
// At some point, if the load fails, either in this
// callback, or through some other async means, call
// reject like this:
data.deferred.reject(data.absUrl, data.options);
});