Как сделать запрос POST JSONP в angular?

Метод $http.jsonp, описанный в официальной документации, всегда выполняет запросы на получение: http://docs.angularjs.org/api/ng. $http # methods_jsonp.

Я попытался настроить параметр конфигурации на "POST", но он по-прежнему отправляет GET:

$http.jsonp('/api/new?callback=JSON_CALLBACK', {method: 'POST'});

Я также попытался установить аргумент данных в надежде, что angular переключится на POST:

$http.jsonp('/api/new?callback=JSON_CALLBACK', {data: {stuff: true}});

Но он все еще не делает:)

Что касается создания такой публикации:

$http.post('/api/new?callback=JSON_CALLBACK')

Он действительно делает POST, но не делает волшебную штуку angular с JSON_CALLBACK и производит следующую ошибку JS:

No 'Access-Control-Allow-Origin' header is present on the requested resource. Origin 'http://xxx.yyy.zzz' is therefore not allowed access.

(API не находится на том же сервере, что и приложение, это точка JSONP).

Google был самым бесполезным в этой проблеме, а чтение через angular источников - не самая простая задача. Итак, как я могу сделать запрос POST JSONP с помощью angular?

Ответ 1

Вы не можете сделать запрос POST с использованием JSON-P (с или без Angular)

Запрос JSON-P работает, создавая элемент <script> с атрибутом src. Это всегда вызовет запрос GET.


Если вы хотите сделать запрос POST с междоменным доменом с помощью JavaScript, вы должны использовать либо XMLHttpRequest (и иметь серверные ресурсы для соответствующих заголовков управления доступом в соответствии с спецификацией CORS) или прокси-запрос через сервер, на котором размещена страница.