当无法定义回调时使用angularjs JSONP
Using angularjs JSONP when callback cant be defined
>我正在尝试使用Angularjs从USGS地震源中收集数据。通常,您需要将 ?callback=JSON_CALLBACK 附加到 URL 的末尾,以便 Angular 使用它,但是 USGS 提要无法识别此选项。
我正在使用的 URL 是 http://earthquake.usgs.gov/earthquakes/feed/v1.0/summary/all_day.geojsonp 的,添加 ?callback=JSON_CALLBACK(例如 http://earthquake.usgs.gov/earthquakes/feed/v1.0/summary/all_day.geojsonp?callback=JSON_CALLBACK)返回包装在名为 eqfeed_callback 的函数中的数据集。
有没有办法使用这些数据?我有一个eqfeed_callback函数,但它不在范围内,这使得使用 Angular 毫无意义。
这是我拥有的代码:
function QuakeCtrl($scope, $http) {
$scope.get_quakes = function() {
var url = 'http://earthquake.usgs.gov/earthquakes/feed/v1.0/summary/all_day.geojsonp';
$http.jsonp(url)
}
}
function eqfeed_callback(data) {
return data;
}
有没有办法将数据放回范围,或者在内部使用 eqfeed_callback 函数?
另一种选择是在如下所示的范围内定义eqfeed_callback:
function QuakeCtrl($scope, $http) {
$scope.data = null;
$scope.get_quakes = function() {
var url = 'http://earthquake.usgs.gov/earthquakes/feed/v1.0/summary/all_day.geojsonp';
$http.jsonp(url)
}
window.eqfeed_callback = function(data) {
$scope.data = data
}
}
想到的唯一想法是(blech)使用全局,然后手动触发Angular更新,例如:
var callback$scope;
function QuakeCtrl($scope, $http) {
$scope.get_quakes = function() {
var url = 'http://earthquake.usgs.gov/earthquakes/feed/v1.0/summary/all_day.geojsonp';
callback$scope = $scope;
$http.jsonp(url)
}
}
function eqfeed_callback(data) {
if (callback$scope) {
// 1. Use callback$scope here
// 2. Set callback$scope to undefined or null
// 3. Trigger an Angular update (since it won't be automatic)
}
}
不漂亮,但是...
扩展@MichaelVanRijn的答案:
为了保持"全球和平",在需要时定义全局函数,然后立即将其无效。
.controller('QuakeCtrl', function($window, $scope, $http) {
$scope.get_quakes = function() {
$window.eqfeed_callback = function(data){
console.log("quake data", data)
};
// load your jsonp data
$http.jsonp('http://earthquake.usgs.gov/earthquakes/feed/v1.0/summary/all_day.geojsonp')
.then(function(success) {
console.log(success);
$window.eqfeed_callback = null;
}, function(fail) {
console.log(fail);
$window.eqfeed_callback = null;
})
}
})
相关文章:
- 正在分析AngularJS中的JSONP文件
- AngularJS http.jsonp请求.then和.success函数不起作用
- AngularJS如何解码带有令牌和内部用户信息的jsonp响应
- JSONP and AngularJS
- AngularJS在从HTTP返回的JSON中获取语法错误.JSONP.
- 如何更改 AngularJS $http.jsonp 的标头
- 当无法定义回调时使用angularjs JSONP
- AngularJS http.jsonp回调未定义
- AngularJS$http请求使用jsonp到一个html页面
- AngularJS从深度嵌套的jsonp渲染
- 将angularjs与静态jsonp一起使用只能工作一次
- 如何在$http's AngularJS中的JSONP自动解析
- 在Slim PHP中生成JSONP失败,无法在AngularJS中读取
- AngularJS:如何将JSONP数据渲染成HTML
- load JSONP with AngularJS
- 用angularjs的头文件调用JSONP
- 如何访问angularjs回调结果jsonp
- angularjs $resource result jsonp
- JSONP Query and AngularJS
- JSONP与Angularjs不能与TwitchTV api一起工作