Jquery 访问函数外部的值
我正在尝试从url获取数据到我的代码。我正在Service.js中执行此操作。这是我的代码Jquery 访问函数外部的值,jquery,angularjs,http,return,Jquery,Angularjs,Http,Return,我正在尝试从url获取数据到我的代码。我正在Service.js中执行此操作。这是我的代码 var demoService = angular.module('demoService', []) .service('myService', function($http, $q) { var v=0; this.getdata = function() { $http.get('myurl').then(function(data) { v = data.dat
var demoService = angular.module('demoService', [])
.service('myService', function($http, $q) {
var v=0;
this.getdata = function() {
$http.get('myurl').then(function(data) {
v = data.data.Tweets[0].FAVOURITE_COUNT;
});
return v; // how to return v from here(doesn't return the function's v)
}
})
我想通过调用服务在我的AngularJS控制器中使用它:
myService.getdata()//the v = data.data.Tweets[0].FAVOURITE_COUNT needed here
但问题是函数返回0外部定义的v,而不是我填充它的值!有没有一种方法可以让我只处理从URL返回的对象,然后传递一个值并返回它
提前谢谢
使用Ajax调用
服务:
控制器:
$http.get方法返回承诺。这意味着在返回数据后,数据被设置为v变量。因此,您应该仅在承诺得到解决后才能获取数据。例如:
angular.module('demoService', [])
.service('myService', function($http, $q) {
var data = null;
this.fetchData = function() {
$http.get('myurl').then(function(data) {
data = data.data.Tweets[0].FAVOURITE_COUNT;
});
}
this.fetchDataNoSave = function() {
return $http.get('myurl');
}
this.getData = function() {
return data;
}
})
angular.module('demoService').controller('ViewCtrl', function(demoService, $scope) {
demoService.fetchDataNoSave().then(function(data) {
$scope.v = data.data.Tweets[0].FAVOURITE_COUNT;
})
// OR
demoService.fetchData().then(function() {
$scope.v = demoService.getData();
})
})
这些选项的不同之处在于,第一个选项不会在服务中保存状态,而您每次都应该获得此状态。第二个是管理服务中的状态,这意味着每个具有注入服务的控制器都将有权访问获取的数据在异步$http.get调用处理v值之前,您将返回v值,这就是为什么您一直得到0的结果。@benderr:请您分享一些关于如何解决此类错误的建议好吗?this.getData=function{return$http.get'myurl';}然后是myService.getData.thenfunctiondata{…};你应该能够用承诺来解决这个问题,我现在不能建立一个例子,对不起
var demoService = angular.module('demoService', [])
.controller('myctr',['$scope','myService',function($scope,myService){
myService.getdata().then(function(response){
//Success
},function(response){
//Error
});
}]);
angular.module('demoService', [])
.service('myService', function($http, $q) {
var data = null;
this.fetchData = function() {
$http.get('myurl').then(function(data) {
data = data.data.Tweets[0].FAVOURITE_COUNT;
});
}
this.fetchDataNoSave = function() {
return $http.get('myurl');
}
this.getData = function() {
return data;
}
})
angular.module('demoService').controller('ViewCtrl', function(demoService, $scope) {
demoService.fetchDataNoSave().then(function(data) {
$scope.v = data.data.Tweets[0].FAVOURITE_COUNT;
})
// OR
demoService.fetchData().then(function() {
$scope.v = demoService.getData();
})
})