По сути, вы не можете запрашивать данные JSON из другого домена через AJAX из-за политики того же происхождения. AJAX позволяет вам извлекать данные после того, как страница уже загружена, а затем выполнять некоторый код / вызывать функцию, когда она возвращается. Мы не можем использовать AJAX, но нам разрешено вставлять теги <script>
на нашу собственную страницу, и они могут ссылаться на скрипты, размещенные в других доменах.
Обычно вы используете это для включения библиотек из CDN, таких как jQuery . Однако мы можем злоупотреблять этим и использовать его для извлечения данных! JSON уже является допустимым JavaScript (по большей части), но мы не можем просто вернуть JSON в нашем файле скрипта, потому что у нас нет способа узнать, когда скрипт / данные закончили загрузку, и у нас нет способа получить к нему доступ, если только присваивается переменной или передается функции. Поэтому вместо этого мы говорим веб-сервису, чтобы он вызывал функцию от нашего имени, когда она будет готова.
Например, мы можем запросить некоторые данные у API фондовой биржи, и наряду с нашими обычными параметрами API мы дадим ему обратный вызов, например callThisWhenReady
. Затем веб-служба упаковывает данные с помощью нашей функции и возвращает ее следующим образом: callThisWhenReady({...data...})
. Теперь, как только скрипт загрузится, ваш браузер попытается выполнить его (как обычно), который, в свою очередь, вызывает нашу произвольную функцию и передает нам данные, которые мы хотели.
Он работает подобно обычному AJAX-запросу, за исключением того, что вместо вызова анонимной функции мы должны использовать именованные функции.
jQuery фактически поддерживает это без проблем для вас, создавая функцию с уникальным именем и передавая ее, которая, в свою очередь, в свою очередь запускает нужный вам код.