如何以角度形式发出JSONP POST请求?

时间:2014-01-25 14:58:55

标签: javascript angularjs

官方文档中描述的$ http.jsonp方法似乎总是执行get请求: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,但是没有使用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的重点)。

谷歌在这个问题上最无益,通过角度来源阅读并不是最简单的任务。那么如何使用angular?

创建JSONP POST请求

1 个答案:

答案 0 :(得分:30)

您无法使用JSON-P(有或没有Angular)发出POST请求

JSON-P请求的工作原理是生成具有<script>属性的src元素。这将始终触发GET请求。


如果您想使用JavaScript发出跨域POST请求,那么您必须使用XMLHttpRequest(并让服务器根据the CORS specification提供合适的访问控制头)或通过托管页面的服务器代理请求