Перекрестный домен AJAX, вызываемый с JSONP, возвращает простой JSON

Я столкнулся с проблемой с API, который я хочу использовать. API возвращает простой JSON, но его вызов AJAX кросс-домена, поэтому я должен использовать jsonp.

            $.ajax({
                type: "GET",
                url: url + query,
                contentType: "application/json",
                dataType: "jsonp",
                success: function(data){
                    console.log(data);
                }
            });

Проблема в том, что когда я изменяю dataType на "json", возникает ошибка:

В запрошенном ресурсе нет заголовка "Access-Control-Allow-Origin". Следовательно, исходное положение "X" не допускается.

Это связано с тем, что он является перекрестным вызовом ajax. Но когда это jsonp, он говорит:

Uncaught SyntaxError: Неожиданный токен:

Другими словами, он не распознает формат json.

Я использую jquery для вызова ajax. Любые предложения, как это решить?

+1
источник поделиться
2 ответа

Поскольку у вас нет доступа к серверу, на котором размещен API, вы можете использовать утилиту веб-службы, такую как CURL, для доступа к API. Для вызовов AJAX требуется, чтобы CORS (перекрестный источник ресурсов) включался на сервере, на котором обслуживается API.

Вы можете вызвать веб-службу на своей странице локального сервера через AJAX, откуда будет сделан вызов CURL, и ответ будет возвращен.

0
источник

Существует несколько способов обхода междоменных ограничений (CORS, JSONP, Transport iframe и т.д.), Но все методы имеют общий характер, что сервер API должен быть корпоративным. Поэтому, если у вас нет привилегий на сервере API, вы не можете столкнуться с ограничениями между доменами.

Единственный способ сделать эту работу - поставить прокси перед API, который вы можете контролировать (прокси-сервер может либо жить в одном домене, либо вводить соответствующие заголовки CORS). Однако это повлияет на производительность и может также иметь юридические последствия.

Что касается JSONP, то это отличное объяснение того, как и почему это работает:

Что такое JSONP?

0
источник

Посмотрите другие вопросы по меткам или Задайте вопрос