Почему я получаю ошибку Access-Control-Allow-Origin при попытке использовать ajax для доступа к странице? - PullRequest
2 голосов
/ 03 декабря 2010

Я пытаюсь использовать ajax для доступа к некоторым данным на моем веб-сайте из сценария, который я хочу запускать где угодно.Ajax-код из моего скрипта выглядит примерно так

var ajax = new XMLHttpRequest();
ajax.open('GET', 'http://mywebsite.com/page?i=2&json', true);
ajax.onreadystatechange = function() {
  if (ajax.status == 200) {
    console.log(JSON.parse(ajax.responseText));
  }
  else
    console.log('Could not connect.');
}
ajax.send();

Но при его запуске выдается ошибка

XMLHttpRequest не может загрузить http://mywebsite.com/page?i=2&json. Origin http://anotherwebsite.com не разрешен Access-Control-Allow-Origin.

В сценарии на моем веб-сайте у меня есть следующие строки внутри страницы:

header('Content-Type: application/json');
header('Access-Control-Allow-Origin: *');
header('Access-Control-Allow-Methods: GET');

Но явсе равно получаю такую ​​же ошибку.Я хочу, чтобы эта страница на моем веб-сайте была доступна с любой другой страницы в Интернете через ajax, поскольку мой сценарий является расширением, которое можно использовать на любом веб-сайте.

РЕДАКТИРОВАТЬ: Хорошо, яЭто сработало, если я установил для атрибута withCredentials объекта ajax значение true и на моем сервере отправил обратно заголовок Access-Control-Allow-Credentials, равный true.Затем со своим сценарием я также передал домен, чтобы его можно было вернуть в Access-Control-Allow-Origin на моем серверном сценарии.Подстановочный знак * не работал.Пока это проверено только в Chrome.

1 Ответ

1 голос
/ 03 декабря 2010

Большинство браузеров не позволяют вам выполнять междоменный ajax, поэтому вы могли бы сделать вызов локального серверного сценария, который делает междоменный ajax и возвращает ответ на ваш javascript.Я слышал, что он называется «proxy-script» и является единственным надежным решением, которое я знаю.

step 1: javascript on otherdomain.com --GET--> server-side script on otherdomain.com
step 2: server-side script on otherdomain.com --GET--> mywebsite.com/page?i=2&json
step 3: mywebsite.com/page?i=2&json --JSON--> server-side script on otherdomain.com
step 4: server-side script on otherdomain.com --JSON--> javascript on otherdomain.com
...