2015-11-07 5 views
0

Я пытаюсь сделать вызов API междоменной сети в JavaScript.вызов API перекрестного домена

Я пробовал угловой $ http с JSONP, но сервер API не поддерживает JSONP, а только json. Использование JSONP Я получаю ошибку «неожиданного маркера». Fiddler показывает, что запрос был успешным и получил правильный объект json. Есть ли способ обойти ошибку и получить то, что получает скрипач?

В качестве альтернативы я попробовал CORS с XMLHttpRequest, как описано here. Запрос завершается неудачно, если на запрошенном ресурсе присутствует обычный заголовок «Нет» Access-Control-Allow-Origin ». Скрипач, однако, показывает, что запрос был успешным с кодом возврата 200.

Я этого не понимаю. Почему скрипач говорит, что код возврата был 200, но вызов CORS терпит неудачу?

Кроме того, я могу получить доступ к URL-адресу API из моего браузера (firefox и chrome) без проблем. API является общедоступным и не требует авторизации.

ответ

1

Этого я совсем не понимаю. Почему скрипач говорит, что код возврата был 200, но вызов CORS терпит неудачу?

Потому что это браузер, который обеспечивает соблюдение SOP. Таким образом, вы делаете свой запрос, сервер отправляет ответ, и браузер смотрит на ответ и говорит: «Нет, я не могу дать этому коду этот ответ».

Если другой конец не поддерживает запрос CORS из вашего источника, и они не поддерживают JSONP, вам придется пройти через прокси-сервер: например, если ваше решение имеет сервер, отправьте запрос на ваш сервер и попросите ваш сервер запросить данные из удаленного API, а затем отправить его обратно вам.

Кроме того, я могу получить доступ к API-адресу из моего браузера (firefox и chrome) без проблем.

Это потому что, когда вы вводите адрес в адресной строке, вы не делаете запрос ajax, и SOP не применяется.

API является общедоступным и не требует авторизации.

Свяжитесь с нами и спросите, поддерживают ли они CORS или JSONP, и вы только что пропустили что-то в документации, позволяющей это. Но обратите внимание, что существует несколько публичных API, которые могут быть общедоступными и открытыми, но не поддерживают CORS или JSONP. Они могут быть предназначены для использования на рабочем столе или сервере, а не ajax.

+0

Это было полезно, спасибо. Я исследую опцию прокси. – hholtij

Смежные вопросы