跨域Ajax调用SubDomain IE7 +

时间:2013-11-21 03:19:05

标签: javascript jquery ajax internet-explorer

我一直很难找到一个好的解决方案。我有一个子域,旨在为站点提供辅助服务。像暗示性销售等,我创建了一个代码,提交ajax帖子进行跟踪。第二个ajax调用将获取html,并将其发布到div。这适用于IE10,Chrome,Safari和Firefox。但是在IE 7-9中不起作用。

我发现很多帖子,半解释一个解决方案。但非似乎对我有用。有没有人有处理这个的经验?非常感谢帮助。

// TRACKER
function log() {
$.ajax({url:"http://sub.differentdomain.com/in/li/", dataType:"html", type:"POST", cache:false, timeout:1000, data:{item:"ITEM1", session:"SESSIONKEY"}});
}

// DISPLAYER
function getTools() {
$.ajax({url:"http://sub.differentdomain.com/out/sug/", dataType:"html", type:"POST", cache:false, timeout:6000, crossDomain:true, async:false, beforeSend:function() {
$("#ccont #selling-tools").html('<div class="boxset" style="width:95%; margin:20px 2%;padding:20px 0.5%; margin-bottom:0;"><img src="loader.gif" align="center" /></div>').show();
}, error:function() {
$("#ccont #selling-tools").html("");
}, data:{item:"ITEM1", session:"KEY1"}}).done(function(html) {
$("#selling-tools").html(html);
});
}

关于完成相同结果的任何其他建议也会......

1 个答案:

答案 0 :(得分:1)

尝试使用此脚本在IE浏览器中启用CORS,然后再进行ajax调用

if ( window.XDomainRequest ) {
    jQuery.ajaxTransport(function( s ) {
        if ( s.crossDomain && s.async ) {
            if ( s.timeout ) {
                s.xdrTimeout = s.timeout;
                delete s.timeout;
            }
            var xdr;
            return {
                send: function( _, complete ) {
                    function callback( status, statusText, responses, responseHeaders ) {
                        xdr.onload = xdr.onerror = xdr.ontimeout = jQuery.noop;
                        xdr = undefined;
                        complete( status, statusText, responses, responseHeaders );
                    }
                    xdr = new XDomainRequest();
                    xdr.onload = function() {
                        callback( 200, "OK", { text: xdr.responseText }, "Content-Type: " + xdr.contentType );
                    };
                    xdr.onerror = function() {
                        callback( 404, "Not Found" );
                    };
                    xdr.onprogress = jQuery.noop;
                    xdr.ontimeout = function() {
                        callback( 0, "timeout" );
                    };
                    xdr.timeout = s.xdrTimeout || Number.MAX_VALUE;
                    xdr.open( s.type, s.url );
                    xdr.send( ( s.hasContent && s.data ) || null );
                },
                abort: function() {
                    if ( xdr ) {
                        xdr.onerror = jQuery.noop;
                        xdr.abort();
                    }
                }
            };
        }
    });
}
相关问题