在IE上拒绝AJAX权限?

时间:2011-01-23 02:48:05

标签: javascript ajax cross-browser

我正在尝试通过发送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();

3 个答案:

答案 0 :(得分:1)

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

答案 1 :(得分:0)

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

答案 2 :(得分:0)

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

错误状态:

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;
};