Jquery 访问函数外部的值

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

我正在尝试从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.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();
    })
})