首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >IE跨域ajax调用XDomainRequest错误

IE跨域ajax调用XDomainRequest错误
EN

Stack Overflow用户
提问于 2012-09-26 01:26:23
回答 2查看 939关注 0票数 2

我必须使用以下代码从Iframe中的页面注销

代码语言:javascript
复制
//The javascript code is in a page in my-domain
//it tries to logout from the page in other-domain
$(window).unload(function() 
{
    if ($.browser.msie && window.XDomainRequest) // IE
    {
        var xdr = new XDomainRequest();
        if (xdr)
        {
            xdr.onerror = function(){alert("XDR onerror");};
            xdr.ontimeout   = function(){alert("XDR timeout");};
            xdr.onprogress  = function(){alert("XDR onprogress");};
            xdr.onload      = function(){alert("XDR onload");};
            xdr.timeout     = 5000;
            xdr.open("GET", 'http://other-domain/.../j_spring_security_logout');
            alert("before send");
            xdr.send();
            alert("after send");
        }
        else
            alert('Failed to create new XDR object.');
    } 
    else // firefox
       $.getJSON( 'http://other-domain/.../j_spring_security_logout?callback=?', null);

}); 

然而,我在IE8中得到了这个顺序中的alter boxes:“发送前”,"XDR onerror",“发送后”。

我在服务器端有以下代码

代码语言:javascript
复制
@Override
public void doFilter(ServletRequest req, ServletResponse res, FilterChain chain) throws IOException, ServletException {
    HttpServletResponse response = (HttpServletResponse) res;
    response.setHeader("Access-Control-Allow-Origin", "*");
    response.setHeader("Access-Control-Allow-Methods", "GET,POST,OPTIONS");
    response.setHeader("Access-Control-Max-Age", "360");
    response.setHeader("Access-Control-Allow-Headers", "x-requested-with");
    chain.doFilter(req, res);
}

我可以验证在我使用$.getJSON和response.setHeader("Access-Control-Allow-Origin",( "*")等等之后,注销在火狐上是否工作得很好;但是当我使用IE时,它不能注销。

然后我在网上找到了这条评论:

代码语言:javascript
复制
"For cross-domain, IE requires you to use XDomainRequest instead of XMLHttpRequest.
 jQuery doesn't do it so you have to do it manually:"

所以我添加了XDomainRequest。但是,我在IE8中看到了警告对话框"XDR onerror“。要在IE中进行此跨域调用,我应该添加什么?

EN

回答 2

Stack Overflow用户

发布于 2012-09-26 01:41:57

尝试使用iframe发出XDomainGet请求:

代码语言:javascript
复制
root = document.body;

myIframe = document.createElement("iframe");
myframe.setAttribute("id", "myFrameId")
myIframe.setAttribute("style", "position: absolute; top: -100px;");
//Making a xget
myIframe.setAttribute("src", "http://other-domain.../j_spring_security_logout?callback=?");

root.appendChild(myframe);

删除do: document.body.removeChild( document.getElementById("myFrameId") );或root.removeChild(myFrame);

票数 1
EN

Stack Overflow用户

发布于 2015-10-07 04:22:12

IE8/9中的CORS请求可以使用jQuery plugin jquery-transport-xdr启用

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/12588058

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档