Выполнение AJAX-вызовов из субдомена в основной домен с относительными путями - PullRequest
0 голосов
/ 28 февраля 2012

У меня есть следующая структура: http://subdomain.mysite.com

Оттуда я хочу иметь возможность AJAX-вызов: http://mysite.com/releases/ajax/file.php

Если я использую абсолютный URL, как указано выше, JS выдает ошибку, которая заявляет «ошибка прав доступа» в строке:

xmlhttp.open("POST",url,true);

Есть ли способ получить с относительными путями из субдомена?Если нет, я бы, вероятно, положил бы перенаправление для использования mysite.com/subdomains.

1 Ответ

2 голосов
/ 28 февраля 2012

Это из-за политики одного и того же происхождения. AJAX-запросы по умолчанию не могут пересекать границы домена, даже если это поддомен (даже для mysite.com и www.mysite.com, или https://mysite.com и http://mysite.com).. Вы можете узнать об этом чуть больше функция безопасности здесь:
http://en.wikipedia.org/wiki/Same_origin_policy

Поскольку это ограничительное ограничение очень проблематично для разработчиков, более новые браузеры поддерживают инфраструктуру политик, называемую CORS (Cross-Origin Resource Sharing), которая позволяет вам указывать разрешенные хосты для связи. К сожалению, базовая поддержка не была реализована в Internet Explorer до версии 8, поэтому, если вам нужно поддерживать IE6-7, она не будет работать для вас:
http://en.wikipedia.org/wiki/Cross-origin_resource_sharing

То, что большинство людей будут делать в этой ситуации, это использовать вместо этого JSONP, который использует тот факт, что обычные теги сценариев не связаны политикой того же источника, и поэтому ответ JSON обернут в вызов функции и выполнен браузером, позволяя обратному вызову доступ к этим данным. Дополнительная информация о JSONP:
http://en.wikipedia.org/wiki/JSONP

Одним заметным ограничением JSONP является то, что он может использоваться только для запросов GET к серверу (не POST или других типов запросов HTTP).

Многие популярные JavaScript-фреймворки, такие как jQuery, поддерживают JSONP в качестве опции (чаще всего путем переключения переменной типа запроса при создании запроса AJAX), но, очевидно, вам все равно необходимо настроить серверный скрипт, который обрабатывает на эти запросы ответьте соответственно.

...