我正在尝试修改IE8中破坏的一些现有代码。从我在网上读到的内容来看,这是一个涉及XDomainRequest和XMLHttpRequest的常见问题。
我以前没有以这种方式使用过 AJAX,所以我在竞争中不知道该怎么做。代码如下:(我已将括号"[["和"]]"中的敏感信息替换为任意变量名称,以标识每个变量的使用位置):
jQuery(document).ready(function() {
var base_url = '[[BASE_URL_1]]'; // DTRT for ajax requests (CORS over HTTP by default)
if (document.location.protocol == "https:") {
base_url = '[[BASE_URL_2]]'; // The proxy script that lets us do secure cross-domain AJAX requests
}
var classSpec = '$class_spec';
$('#[[ID_1]]').empty().addClass('loading'); // loading gif
$('#[[ID_2]]').empty().addClass('loading');
$.ajax( {
type: "GET",
url: base_url + '[[URL_1]]' + classSpec + '[[URL_2]]',
success: function (data) { $('[[ID_2]]').html(data).removeClass('loading'); }
} );
$.ajax( {
type: "GET",
url: base_url + '[[URL_1]' + classSpec + '[[URL_3]]',
success: function (data) { $('[[ID+1]]').html(data).removeClass('loading'); initialize(); }
} );
});
如何修改此代码以包含对 IE8 的支持?
要执行跨域请求,您可能需要检查以下内容
- jQuery.support.cors = true;
- 跨域 = 真;
- http://api.jquery.com/jQuery.ajax/
- 访问控制允许源标头
- http://msdn.microsoft.com/en-us/library/dd573303%28v=vs.85%29.aspx
- https://developer.mozilla.org/en/docs/HTTP/Access_control_CORS
1 & 2
jQuery(document).ready(function() {
var base_url = '[[BASE_URL_1]]'; // DTRT for ajax requests (CORS over HTTP by default)
if (document.location.protocol == "https:") {
base_url = '[[BASE_URL_2]]'; // The proxy script that lets us do secure cross-domain AJAX requests
}
var classSpec = '$class_spec';
$('#[[ID_1]]').empty().addClass('loading'); // loading gif
$('#[[ID_2]]').empty().addClass('loading');
jQuery.support.cors = true;
$.ajax(
{
crossDomain: true,
type: "GET",
url: base_url + '[[URL_1]]' + classSpec + '[[URL_2]]',
success: function (data) { $('[[ID_2]]').html(data).removeClass('loading'); }
} );
$.ajax(
{
crossDomain: true,
type: "GET",
url: base_url + '[[URL_1]' + classSpec + '[[URL_3]]',
success: function (data) { $('[[ID+1]]').html(data).removeClass('loading'); initialize(); }
} );
});
3)实际上要求您有权访问要与之通信的服务器。基本上,远程服务器对浏览器说:嘿,我允许这些域执行XDR请求,如果您不是其中之一..请不要发送任何内容。(就个人而言,这是我见过的最疯狂的安全场景..由于这取决于请求者,因此不要向不需要他请求的域发出请求。这听起来真的很安全,海因!
因此,如果您在服务器 site1.com 上并希望 XDR 以 site2.com,那么 site2.com 必须返回一个标头,例如
访问控制允许来源: *
或
访问控制允许来源:site1.com
使用 IIS 服务器时,您可能还需要提供: 访问控制允许方法
以上通常适用于所有浏览器,而不仅仅是IE8,有关IE8的细节,请在此处查看:http://blogs.msdn.com/b/ieinternals/archive/2010/05/13/xdomainrequest-restrictions-limitations-and-workarounds.aspx
我建议尝试这个库:https://github.com/MoonScript/jQuery-ajaxTransport-XDomainRequest
在 jQuery 1.5+ 中使用 $.ajax 函数时,使用 IE8 和 IE9 的 XDomainRequest 对象实现自动跨源资源共享支持"
它确实具有与XDomainRequest相同的限制,即:
为了在 Internet Explorer 中使用 XDomainRequest,请求必须是:
- 仅获取或发布
- 发布时,数据将始终以文本/纯文本的内容类型发送
- 仅 HTTP 或 HTTPS
- 协议必须与调用页面的方案相同
- 始终异步
看起来您正在检查匹配的协议,因此您应该在那里被覆盖。