kotcich
@kotcich
Я скучный.

Как получить данные со второго домена через fetch, если Header set Access-Control-Allow-Origin * уже стоит?

Запрос на контроллера другого домена (Header set Access-Control-Allow-Origin * стоит и в 1 домене и во 2)
fetch('http://back.ru/site').then(res => {return res.json()}).then(data => {console.log(data)});


Это то, что мне должно прийти (все просто)
$arr = ['nice', 'ok', 'wrong'];
        return json_encode($arr);


Текст ошибки fetch в консоли браузера:
Uncaught (in promise) SyntaxError: Unexpected token < in JSON at position 0

При запросе на точно такой же метод контроллера, но уже на тот же домен (то есть и fetch тот же и данные получаемые те же), все работает (то есть никакой синтаксической ошибки нету в fetch, он ее всегда кидает с таким текстом, по любой проблеме). Но стоит попробовать получить данные из метода другого домена(с Header set Access-Control-Allow-Origin * повторюсь), так сразу ошибка.

Как я понял Header set лишь позволяет как бы зайти на страницу другого домена, но данные я все равно не получу, а как и зайти, и получить?
  • Вопрос задан
  • 261 просмотр
Решения вопроса 1
@AUser0
Чем больше знаю, тем лучше понимаю, как мало знаю.
В любом современном браузере откройте DevTool (кнопка F12), перейдите на вкладку Network, совершите необходимое обращение к другому домену, и смотрите, что именно браузер получил в этом запросе (щёлкнуть запрос, смотреть в окошечке слева во вкладке Response). Вот 100% там будет HTML вместо ожидаемого JSON.
Ответ написан
Пригласить эксперта
Ответы на вопрос 1
zkrvndm
@zkrvndm
Архитектор решений
Ваш сервер возвращает не JSON из-за чего ошибка. Попробуйте прочитать ответ второго сайта, как просто текст:
fetch('http://back.ru/site').then(res => {return res.text()}).then(data => {console.log(data)});
Ответ написан
Комментировать
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Похожие вопросы