访问被拒绝.请求安全页面时出现JavaScript错误

iho*_*rko 1 javascript ajax https xmlhttprequest

在页面上SomePage.aspx,通过JavaScript代码(XMLHttpRequest),我调用了SecuredPage.aspx下一个代码:

    var httpRequest = GetXmlHttp();
    var url = "https://myhost.com/SecuredPage.aspx";

    var params = "param1=" + document.getElementById('param1').value +
                "&param2=" + document.getElementById('param2').value;

    httpRequest.open("POST", url, true);
    httpRequest.setRequestHeader("Content-Type", "application/x-www-form-urlencoded");

    httpRequest.onreadystatechange = function() {
        //Call a function when the state changes.
        if (httpRequest.readyState == 4 && httpRequest.status == 200) {
            alert(httpRequest.responseText);
        }
    }
    httpRequest.send(params); // HERE ACCESS IS DENIED.

    //---------------------------------------------
    function GetXmlHttp() {
        var xmlhttp = false;
        if (window.XMLHttpRequest) {
            xmlhttp = new XMLHttpRequest();
        }
        else if (window.ActiveXObject)
        // Code for Internet Explorer.
        {
            try {
                xmlhttp = new ActiveXObject("Msxml2.XMLHTTP");
            }
            catch (e) {
                try {
                    xmlhttp = new ActiveXObject("Microsoft.XMLHTTP");
                } catch (E) {
                    xmlhttp = false;
                }
            }
        }
        return xmlhttp;
    }
Run Code Online (Sandbox Code Playgroud)

它抛出Access拒绝错误.如果发送到http(http://myhost.com/SecuredPage.aspx),它可以正常工作.

怎么可能解决这个问题?

Mar*_*sen 5

如果您希望通过Ajax 获取HTTPS页面,则需要从同一域上的HTTPS页面执行此操作,只要您使用Ajax,就没有其他办法.这是因为相同的原产地政策.

也就是说,有很多方法可以不使用Ajax,例如你可以使用框架.

另一种方法是使用JSONP,但这需要你提取,好吧,JSON :)

第三种方式,对于生产网站来说往往不是很有用,但仍然可以很有趣,可以使用YQL作为代理.

最后,您始终可以设置自己的服务器端代理,以便调用获取HTTPS页面并将其发送的HTTP地址,但如果可以避免,这很少是一个很好的解决方案.