修复IE8中的跨域请求

时间:2013-10-19 19:05:59

标签: jquery ajax internet-explorer-8 cors crossdomain-request.js

我正在尝试修改一些在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的支持?

2 个答案:

答案 0 :(得分:1)

要执行跨域请求,您可能需要检查以下内容

  1. jQuery.support.cors = true;
  2. crossDomain = true;
  3. Access-Control-Allow-Origin标头
  4. 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请求,如果你不是其中之一..请不要发送任何。 (个人而言,这是我见过的最疯狂的安全方案..因为这取决于请求者,不要向不想要他的请求的域提出请求。这听起来很安全,hein!)< / em>的

    因此,如果您在服务器site1.com上并想要XDR到site2.com,那么site2.com必须返回一个标题,如

    Access-Control-Allow-Origin:*

    Access-Control-Allow-Origin:site1.com

    使用IIS服务器时,您可能还需要提供:Access-Control-Allow-Methods


    以上通常适用于所有浏览器,而不仅仅是IE8,因为IE8的具体内容请看这里:http://blogs.msdn.com/b/ieinternals/archive/2010/05/13/xdomainrequest-restrictions-limitations-and-workarounds.aspx

答案 1 :(得分:0)

我建议您尝试使用此库: <{3}}

  

在jQuery 1.5 +中使用$ .ajax函数时,使用IE8和IE9的XDomainRequest对象实现自动跨源资源共享支持“

它与XDomainRequest具有相同的限制,即:

  

要在Internet Explorer中使用XDomainRequest,请求必须为:

     
      
  • 仅限GET或POST   
        
    • 发布时,数据将始终以Content-Type of text / plain
    • 发送   
  •   
  • 仅限HTTP或HTTPS   
        
    • 协议必须与呼叫页面的方案相同
    •   
  •   
  • 始终异步
  •   

看起来你正在检查匹配的协议,所以你应该被覆盖在那里。