无法使用XMLHttpRequest()从http站点检索数据到https

时间:2016-08-04 07:27:55

标签: javascript asp.net xmlhttprequest

我有一个托管在https://上的网站,我想在该网站上提取显示共享属性的网站数据。返回数据的URL是:

http://ir1.euroinvestor.com/asp/ir/xmlirmultiiso2.aspx?companyid=281191

我为获取数据而开发的代码如下:

function GetSharesUpdate(){
    // makeing AJAX calls to the web service for getting the share update    
    var xhr = new XMLHttpRequest(); // Set up xhr request
    xhr.open("GET", "http://ir1.euroinvestor.com/asp/ir/xmlirmultiiso2.aspx?companyid=281191", true);   // Open the request
    xhr.responseType = "";   // Set the type of response expected    
    xhr.send();
    //  Asynchronously wait for the data to return
    xhr.onreadystatechange = function () {
        if (xhr.readyState == xhr.DONE) {
            var tempoutput = xhr.responseXML;
            alert(tempoutput);
        }
    }
    //  Report errors if they happen
    xhr.addEventListener("error", function (e) {
        console.error("Error: " + e + " Could not load url.");
    }, false);       
}

我在语句xhr.send();上收到错误,如下所示:

  

混合内容:“https://[SiteUrl]”页面是通过HTTPS加载的,   但是请求了一个不安全的XMLHttpRequest端点   'http://ir1.euroinvestor.com/asp/ir/xmlirmultiiso2.aspx?companyid=281191'。   此请求已被阻止;内容必须通过HTTPS提供。

如果我将网址更改为https,即

https://ir1.euroinvestor.com/asp/ir/xmlirmultiiso2.aspx?companyid=281191

然后执行xhr.send();时没有任何错误,但我得到xhr.responseXML null。

我应该如何更改代码以使其正常工作?

1 个答案:

答案 0 :(得分:0)

第一个问题是您正在向非https域执行ajax请求,但您的域已安装SSL。

第二个问题是交叉来源请求CORS,即使你先解决也会遇到这个问题(即使你从非http域尝试ajax请求)。

由于您要从其他网站请求数据,除非请求的服务器配置为为您的域提供请求,否则最有可能发生这种情况 要解决此问题,您需要从服务器(代理服务器)调用数据,或者将请求的服务器配置为允许来自您域的请求。

了解详情 - https://developer.mozilla.org/en-US/docs/Web/HTTP/Access_control_CORS