2014-09-03 2 views
1

У меня есть проблема, когда я использую $ http с моим API, который я написал с помощью Symfony. Когда я использую $ http.get на стороне сервера, я добавляю заголовок для ответа: Access-Control-Allow-Origin и все работает, и я могу получить требуемые данные с сервера. Но когда я использую $ http.post и добавляю этот заголовок, ничего не работает.

$http.post('http://myhost.loc/posts', {data:'Test string'}).success(function(data, status){ 
    console.log(data); 
}).error(function(data, status){ 
    console.log(status); 
}); 

И я получаю ошибку: OPTIONS http://myhost.loc/posts и Нет 'Access-Control-Allow-Origin' заголовок присутствует на запрошенный ресурс. Я не понимаю, почему это не работает.

ответ

1

Перед отправкой крест запрос домена, есть запрос предварительной проверки, отправленный с помощью метода OPTIONS. Цель этого предполетного запроса, чтобы проверить, если Ressource достижим

Вы можете попробовать, что в вашем апача .htaccess

<ifModule mod_headers.c> 
    Header always set Access-Control-Allow-Origin: "*" 
    Header always set Access-Control-Allow-Methods "POST, GET, PUT, DELETE, OPTIONS" 
    Header always set Access-Control-Allow-Headers "origin, x-requested-with, content-type" 
</ifModule> 
+0

Должен ли я добавить в мой хост, который работает со статическими файлами или работает с API? – madberdin

+0

Я добавил эти строки в свой файл htaccess, пробовал разные комбинации, и он все еще не работает. Это убьет меня) – madberdin

+0

Вместо запроса POST он отправляет запрос OPTIONS. Я создал заголовки a2enmod, allowmethods для моего Apache, и я получаю новую ошибку: XMLHttpRequest не может загрузить http: //api.host.loc/app_dev.php/add. Недопустимый код состояния HTTP 405 – madberdin

2

его проблема CORS первую очередь включить CORS на вашем угловом приложение по

Сервер поддержки CORS должен отвечать на запросы с несколькими контроля доступа заголовков:

• Access-Control-Allow-Origin * 
+0

Я сделал это, но я не помогло. У меня все еще такая же проблема. – madberdin

+0

Ваш сервер ответил на этот заголовок, о котором я упоминал? –

+0

В моем действии, которое отправляет ответ, у меня есть следующий код $ response = new JsonResponse(); $ response-> headers-> set ('Access-Control-Allow-Origin', '*'); return $ response; – madberdin

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