Вы должны понимать, что термин blob JSON url на самом деле не существует. URL-адрес данных существует, но вам действительно нужно понять, что такое URL-адрес данных :
A URL-адрес данных не является традиционным URL-адресом, поскольку Вы бы поняли это. Это схема URL, которая на самом деле содержит данные в виде строки в кодировке BASE64.
Следующим важным моментом является то, что FileReader
не является интерфейсом для работы с URL-адресами данных или любыми URL-адресами. API FileReader
полезен, когда у вас есть ссылка File
. Обычно вы получаете ссылку File
, когда пользователь выбирает или перетаскивает файл на ваш сайт. Здесь важно следующее: File
- это ссылка на локальный файл на компьютере, на котором открыт браузер. Метод readAsDataURL
API FileReader
используется для преобразования File
в URL-адрес данных. Это полезно, когда пользователь выбирает файл, и вы хотите показать предварительный просмотр. Тогда вы можете использовать readAsDataURL
. Он будет в основном читать этот файл, конвертировать его в BASE64 и добавлять к нему что-то вроде data:image/png;base64,
в случае png-изображения перед т.
При этом reader.readAsDataURL(xhr.response);
не очень полезная вещь. Если ваш URL действительно нацелен на изображение, вы можете просто сделать <image id="div" src="http://example.com/your-image.png" />
. Или что-то вроде document.querySelector("#div").src = yourUrl;
. Вам не нужен XMLHttpRequest.
Однако, если ваш URL возвращает JSON и внутри JSON есть URL-адрес данных (или обычный URL-адрес), вам просто нужно получить этот URL-адрес данных. И тогда вы можете сделать document.querySelector("#div").src = yourUrl;
. Но в этом случае вам нужно , чтобы сделать запрос AJAX.
На самом деле вы делаете запрос AJAX
. XMLHttpRequest
- это AJAX.
Краткое примечание о jsonp
: не используйте его. Это хак с долгого времени go, вам это не нужно. То, что вы ищете, это CORS
. Так что да, если вам нужно получить JSON из другого источника, вам нужно использовать CORS
. И вам нужно реализовать это на стороне сервера. Не в вашем javascript. Однако, если ваш URL является прямым BLOB
URL, вам не нужно AJAX (и так XMLHTttpRequest
.
Последнее замечание о XMLHTttpRequest
: если вы пытаетесь использовать современные API: избегайте его Существует намного более чистый и лучший fetch
API, который вы должны использовать.