【问题标题】:How to create Cross Domain XMLHTTPRequests in Internet Explorer如何在 Internet Explorer 中创建跨域 XMLHTTPRequest
【发布时间】:2011-10-01 20:48:53
【问题描述】:

我的代码看起来像这样,建议在 IE 上运行,但它只在 Chrome 和 FF 中运行。是否有从另一个域访问 url 的正确方法。此外,该域是我拥有的域,并且可以允许访问尝试访问它的脚本:

<script language="javascript" type="text/javascript">
function sendRequest(url,callback,postData) {
    var req = createXMLHTTPObject();
    if (!req) return;
    var method = (postData) ? "POST" : "GET";
    req.open(method,url,true);
    req.setRequestHeader('User-Agent','XMLHTTP/1.0');
    if (postData)
        req.setRequestHeader('Content-type','application/x-www-form-urlencoded');
    req.onreadystatechange = function () {
        if (req.readyState != 4) return;
        if (req.status != 200 && req.status != 304) {
//          alert('HTTP error ' + req.status);
            return;
        }
        callback(req);
    }
    if (req.readyState == 4) return;
    req.send(postData);
}

var XMLHttpFactories = [
    function () {return new XMLHttpRequest()},
    function () {return new ActiveXObject("Msxml2.XMLHTTP")},
    function () {return new ActiveXObject("Msxml3.XMLHTTP")},
    function () {return new ActiveXObject("Microsoft.XMLHTTP")}
];

function createXMLHTTPObject() {
    var xmlhttp = false;
    for (var i=0;i<XMLHttpFactories.length;i++) {
        try {
            xmlhttp = XMLHttpFactories[i]();
        }
        catch (e) {
            continue;
        }
        break;
    }
    return xmlhttp;
}

function handleRequest(req) {
    var MyResponse = req.responseText;
    document.open();
    document.write(MyResponse);
    document.close();
}

 sendRequest("http://anotherdomain.com/urlwithcontentneeded.php",handleRequest);


</script>

【问题讨论】:

  • 您确定它可以在 Chrome 和 Firefox 中运行吗?这不应该是因为相同的原产地政策。 en.wikipedia.org/wiki/Same_origin_policy
  • 域上的脚本具有 Access-Control-Allow-Origin * - 是的 Chrome 和 FF 都可以工作,包括 Safari。

标签: javascript internet-explorer xmlhttprequest


【解决方案1】:

IE 不支持这种方式的跨域请求,但确实可以使用 XDomainRequest 对象,请参阅http://msdn.microsoft.com/en-us/library/cc288060(v=vs.85).aspx

不过,它的工作方式大致相同,是的,在不同的浏览器中有两种方法可以做到这一点,这很痛苦

【讨论】:

猜你喜欢
  • 2013-09-17
  • 1970-01-01
  • 2014-03-15
  • 2012-08-27
  • 1970-01-01
  • 2012-03-18
  • 2012-05-10
  • 1970-01-01
  • 2015-12-26
相关资源
最近更新 更多