使用AJAX请求从另一个域获取图像数据

时间:2015-05-04 08:02:21

标签: javascript ajax cross-domain typescript

我正在尝试使用 AJAX请求从另一个域获取图像的二进制数据。我尝试了各种方法,但没有可行的解决方案。我在互联网上发现了一些看起来不错的代码,但即使有了这个电话,我也会收到错误。

我错了什么?有标准化的方法吗?

这是我到现在为止所尝试的:

var request = this.createCORSRequest('GET', 'http://url/to/image.png');
request.onload = function () {
    var text = request.response;
};
request.onerror = function (error) {
    alert('Woops, there was an error making the request.');
};

request.send();

private createCORSRequest(method, url) {
        var xhr: XMLHttpRequest = new XMLHttpRequest();
        if ("withCredentials" in xhr) {

        // Check if the XMLHttpRequest object has a "withCredentials" property.
        // "withCredentials" only exists on XMLHTTPRequest2 objects.
        xhr.open(method, url, true);

        } else if (typeof XDomainRequest != "undefined") {

            // Otherwise, check if XDomainRequest.
            // XDomainRequest only exists in IE, and is IE's way of making CORS requests.
            var xdhr = new XDomainRequest();
            xdhr.open(method, url);

        } else {

            // Otherwise, CORS is not supported by the browser.
            xhr = null;

        }
        return xhr;
}

我甚至在stackoverflow上找到了没有ajax的解决方案,但它对我不起作用:

Asynchronously load images with jQuery

这里是错误事件包含的属性屏幕:

The error properties

我的目标是从我从原子输入获得的网址中获取图像的二进制。我需要二进制文件将图片复制到MS SharePoint。

2 个答案:

答案 0 :(得分:2)

您无法从其他域获取数据,除非:

  • 远程服务器允许它使用CORS
  • 您以不安全的模式运行浏览器。

原因:否则站点A将能够(恶意地)从站点B读取用户数据

答案 1 :(得分:0)

您必须向方法添加标头以允许跨域请求。 例如,如果您尝试从www.example.com/main.php获取数据,则必须添加标头以允许从不同的域调用这些方法。