2015-05-04 2 views
1

Я пытаюсь получить двоичные данные изображения из другого домена с помощью запроса AJAX. Я пробовал различные методы, но не было никакого рабочего решения. Я нашел код в Интернете, который выглядел хорошо, но даже с этими вызовами я получаю ошибки.Получить данные изображения из другого домена с помощью запроса 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; 
} 

Я даже не нашел это решение без AJAX здесь, на StackOverflow, но она не работает для меня:

Asynchronously load images with jQuery

Здесь экран свойств содержит событие ошибки:

The error properties

Моя цель - получить двоичный код изображения с URL-адреса, который я получаю от подачи атома. Мне нужны двоичные файлы для копирования изображения в MS SharePoint.

+0

Чтобы избежать проблем XY, пожалуйста, опишите, что вы на самом деле хотите сделать с изображением. Кроме того, в коде отсутствует jQuery, но я вижу ключевое слово 'private'. Какая версия JS вы? – mplungjan

+0

Посмотрите здесь - http://stackoverflow.com/questions/8761713/jquery-ajax-loading-image –

+0

Если вы хотите использовать чистый ajax в качестве кода, который вы указали, ваш URL-адрес изображения должен добавить «Access-Control-Allow-Origin» 'для заголовка ответа. –

ответ

2

Вы не можете получить данные из другого домена, если:

  • удаленный сервер не позволяет ему с помощью CORS
  • вы запускаете браузер в небезопасном режиме.

Причина: в противном случае сайт А будет иметь возможность (ехидно) читать пользовательские данные из сайта B

+0

Хорошо, спасибо за информацию. –

+0

Обратите внимание, что пока вы не можете * читать данные изображения *, вы все равно можете отобразить его с помощью тега 'img' – basarat

+0

Спасибо, я знаю, уже пробовал. Но мне нужны бинарные файлы для их загрузки в SharePoint. Будет говорить с администратором сервера, чтобы включить CORS. Кажется, нет другого шанса сделать это. –

0

, чтобы сузить то, что случилось, не могли бы вы заменить request.onerror функцию с этим:

request.onerror = function (error) { 
    alert(error); 
}; 

и вставить здесь ошибку вы получаете?

+0

request.onerror только дает мне [объект ProgressEvent]. Я добавил экран со свойствами события ошибки на мой вопрос. –

+0

Не могли бы вы изменить его снова, чтобы предупредить (error.target.status); чтобы узнать, какова фактическая ошибка? В любом случае, похоже, что ошибка сетевого уровня – xionutz2k

+0

alert (error.target.status) равна 0. –

0

Вы должны добавить заголовки к методу, чтобы запрос перекрестного домена. Например, если вы пытаетесь получить данные с сайта www.example.com/main.php, вы должны добавить заголовки, чтобы разрешить вызов этих методов из разных доменов.