Zend Framework 2 – AJAX Запрос с другого сервера

У меня есть 2 домена (домен A, домен B).

На домене A помещено приложение ZF2, и все в порядке.

На домене B размещается Landing Page (небольшой сайт с формой для сбора данных).

Из целевой страницы я хочу отправить данные формы в приложение на домен A (запрос AJAX).

Unfortunatelly Приложение ZF2 в домене A не получало данных и не показывало результатов. Все нормально, когда я делаю запрос AJAX из того же домена, где есть приложение ZF2.

Я пробовал использовать JSONP, но безуспешно.

У меня нет другого понятия, как заставить это работать.

Related of "Zend Framework 2 – AJAX Запрос с другого сервера"

Как сказал ответ Bodgan, это проблема безопасности браузера, а не проблема ZF2. Один из популярных способов обойти это – изменить ACCESS-CONTROL-ALLOW-ORIGIN вашего домена A, чтобы разрешить запросы из домена B. Этот и другие решения обсуждаются на странице Mozilla Developer Network (MDN) для контроля доступа HTTP (CORS ) .

В основном вам необходимо указать получающему серверу (домен А), что он может отвечать на запросы ресурсов. Вы можете сделать это в файле .htaccess размещенном в корневом каталоге домена A. Ниже приведен простой пример кода, который указывает домену A, что он должен отвечать на запросы совместного использования ресурсов из всех доменов: * . В статье MDN, приведенной выше, содержится более подробное обсуждение «Совместного использования ресурсов (CORS)». Имейте в виду, что есть последствия для безопасности, и в большинстве сценариев вы не хотите открывать свой сервер для запросов от * origins, а скорее к определенному хосту, контролируемому вами самим.

 Options +FollowSymlinks RewriteEngine on Header add Access-Control-Allow-Origin "*" Header add Access-Control-Allow-Headers "origin, x-requested-with, content-type" Header add Access-Control-Allow-Methods "PUT, GET, POST, DELETE, OPTIONS" 

Вы можете изменить файл htaccess для поддержки, но самым простым способом будет использование класса ответа:

 $this->_response->setHeader('Access-Control-Allow-Origin', '*'); 

http://framework.zend.com/manual/2.0/en/modules/zend.http.response.html

Если вы используете json в качестве источника данных конечной точки, используйте его в сочетании с помощником json, который будет устанавливать ваши заголовки кодировки и несколько других вещей

 $this->_helper->json->sendJson($jsonIsite); 

http://framework.zend.com/manual/2.0/en/modules/zend.json.introduction.html

есть https://github.com/zf-fr/zfr-cors для продвинутых CORS с ZF2, но простая конечная точка json с приведенным выше должна работать нормально.

Кросс-доменные запросы ajax запрещены по соображениям безопасности (это называется той же политикой происхождения). http://en.wikipedia.org/wiki/Same_origin_policy