繁体   English   中英

IE上的AJAX权限被拒绝?

[英]AJAX Permission Denied On IE?

我正在尝试通过发送Access-Control-Allow-Origin:*标头向已经允许外部请求的外部域进行ajax调用,但是我在xmlhttp.post()行上获得了拒绝权限。

这是我的代码:

var xmlhttp;
try {
    xmlhttp = new ActiveXObject("Msxml2.XMLHTTP");
} catch (e) {
    try {
        xmlhttp = new ActiveXObject("Microsoft.XMLHTTP");
    } catch (E) {
        xmlhttp = false;
    }
}

if (!xmlhttp && typeof XMLHttpRequest != 'undefined') {
    try {
        xmlhttp = new XMLHttpRequest();
    } catch (e) {
        xmlhttp = false;
    }
}

xmlhttp.onreadystatechange = function () {
    if (xmlhttp.readyState == 4 && xmlhttp.status == 200) {
        alert(xmlhttp.responseText);
    }
}

xmlhttp.open("GET", "http://www.domain.com", true);
xmlhttp.setRequestHeader('Content-type', 'application/x-www-form-urlencoded');
xmlhttp.send();

我相信在IE中,您仍然无法使用XMLHttpRequest进行跨域请求。 为此,您需要使用XDomainRequest对象。 完整的文档在这里 我相信引入单独对象的原因是允许开发人员在发出肯定会因旧版本浏览器失败的请求之前进行兼容性测试。

注意:请勿对Ajax中的URL使用“ http://domain.xxx ”或“ http:// localhost / ”或“ IP”。 仅使用路径(目录)和页面名称而不使用地址。

错误状态:

var AJAXobj = createAjax();
AJAXobj.onreadystatechange = handlesAJAXcheck;
AJAXobj.open('POST', 'http://www.example.com/dir1/dir2/page.php', true);
AJAXobj.setRequestHeader('Content-Type', 'application/x-www-form-urlencoded; charset=UTF-8');
AJAXobj.send(pack);

真实状态:

var AJAXobj = createAjax();
AJAXobj.onreadystatechange = handlesAJAXcheck;
AJAXobj.open('POST','dir1/dir2/page.php', true);   // <<--- note
AJAXobj.setRequestHeader('Content-Type', 'application/x-www-form-urlencoded; charset=UTF-8');
AJAXobj.send(pack);

function createAjax()
{
    var ajaxHttp = null;
    try
    {
        if(typeof ActiveXObject == 'function')
            ajaxHttp = new ActiveXObject("Microsoft.XMLHTTP");
        else 
        if(window.XMLHttpRequest)
            ajaxHttp = new XMLHttpRequest();
    }
    catch(e)
    {
        alert(e.message);
        return null;
    }
    //-------------
    return ajaxHttp;
};

我相信您只能使用URL形式与调用页面相同的Ajax。 不允许该请求的不是外部域,而是浏览器的安全性。 看看Same Origin Policy,这是避免跨浏览器脚本的一种方法-否则,假设您有一个页面可以输入信用卡信息,并且有人注入了一个脚本,该脚本会将您输入的信息发送到外部站点。 战斗将是一个大问题。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM