更新:从 Angular 1.6 开始
您不能再使用 JSON_CALLBACK 字符串作为占位符来指定回调参数值的位置
您现在必须像这样定义回调:
$http.jsonp('some/trusted/url', {jsonpCallbackParam: 'callback'})
通过 更改/访问/声明参数$http.defaults.jsonpCallbackParam
,默认为callback
注意:您还必须确保将您的 URL 添加到受信任/白名单中:
$sceDelegateProvider.resourceUrlWhitelist
或通过以下方式明确信任:
$sce.trustAsResourceUrl(url)
success/error
已弃用。
$http
遗留的Promise 方法已被弃用,success
并将error
在 v1.6.0 中删除。请改用标准 then 方法。如果$httpProvider.useLegacyPromiseExtensions
设置为,false
那么这些方法将抛出$http/legacy error
.
利用:
var url = "http://public-api.wordpress.com/rest/v1/sites/wtmpeachtest.wordpress.com/posts"
var trustedUrl = $sce.trustAsResourceUrl(url);
$http.jsonp(trustedUrl, {jsonpCallbackParam: 'callback'})
.then(function(data){
console.log(data.found);
});
上一个答案:Angular 1.5.x 及之前版本
你所要做的就是改变callback=jsonp_callback
成callback=JSON_CALLBACK
这样:
var url = "http://public-api.wordpress.com/rest/v1/sites/wtmpeachtest.wordpress.com/posts?callback=JSON_CALLBACK";
然后.success
,如果返回成功,您的函数应该像您拥有的那样触发。
这样做可以使您不必弄脏全局空间。这在此处的 AngularJS 文档中有记录。
更新了 Matt Ball 的小提琴以使用此方法:http: //jsfiddle.net/subhaze/a4Rc2/114/
完整示例:
var url = "http://public-api.wordpress.com/rest/v1/sites/wtmpeachtest.wordpress.com/posts?callback=JSON_CALLBACK";
$http.jsonp(url)
.success(function(data){
console.log(data.found);
});