Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/jquery/76.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Javascript 如何使用$http.get每3秒发出一个新请求,并在函数外部获取数据_Javascript_Jquery_Angularjs_Json - Fatal编程技术网

Javascript 如何使用$http.get每3秒发出一个新请求,并在函数外部获取数据

Javascript 如何使用$http.get每3秒发出一个新请求,并在函数外部获取数据,javascript,jquery,angularjs,json,Javascript,Jquery,Angularjs,Json,我想从这个页面获取一些数据。每次刷新页面时,此页面上的数据都会更新。所以我想更新这些值。为了更新这些值,我可以使用$timeout,但是我需要以某种方式在getdata之外获取这些值,因为我希望随后将这些值插入另一个函数以制作图表,否则每次函数更新时,整个图表都会继续呈现。我无法得到这个答案所在函数之外的值,但据我所知,大多数答案都使用函数内部的数据 如何在JavaScript函数之外获取更新的值并将其插入另一个函数?或者也许有另一种更好的方法来解决这个问题 我的代码: function

我想从这个页面获取一些数据。每次刷新页面时,此页面上的数据都会更新。所以我想更新这些值。为了更新这些值,我可以使用$timeout,但是我需要以某种方式在getdata之外获取这些值,因为我希望随后将这些值插入另一个函数以制作图表,否则每次函数更新时,整个图表都会继续呈现。我无法得到这个答案所在函数之外的值,但据我所知,大多数答案都使用函数内部的数据

如何在JavaScript函数之外获取更新的值并将其插入另一个函数?或者也许有另一种更好的方法来解决这个问题

我的代码:

    function getData(){
  var data;

  $http.get(path).then(function(response){
    data = response.data
    console.log(response.data) //works fine
  })
  return data
}

console.log(data)//returns undefined
现在如果我想用$timeout更新函数

我需要这样做

$timeout(getData, 3000)
现在,我如何获得这些更新的值

编辑:

返回14我不知道那是什么,但肯定不是正确的数据

在AngularJS中, 有一个名为$timeout的服务,它可以在一个循环中实现您想要的功能。

请在此处查看全部官方文档:

您好,

在AngularJS中, 有一个名为$timeout的服务,它可以在一个循环中实现您想要的功能。


请在此处查看完整的官方文档:

您只需每隔一段时间运行代码:

setInterval( function(){
    $http.get(path).then(function(response){
        console.log(response.data);
        // Update your page here
    });
}, 3000 );
$interval($scope.getData, 3000); // every 3 seconds

您只需要在一段时间间隔内运行代码:

setInterval( function(){
    $http.get(path).then(function(response){
        console.log(response.data);
        // Update your page here
    });
}, 3000 );
$interval($scope.getData, 3000); // every 3 seconds

使用$q的angular,需要注入$q作为依赖项

function getData(){

  var deffered = $q.defer();
  var data;
  $http.get(path).then(function(response){
    data = response.data
    $q.resolve(data);
  })
  return deffered.promise;
}

var getDataCall = getData();

getDataCall.then(function(data){
console.log(data);
})
如果要重复此调用,请使用,
$interval(fn,delay,[count],[invokeApply],[Pass])

见医生

试着重复这个,(我没有试过)


使用$q的angular,需要注入$q作为依赖项

function getData(){

  var deffered = $q.defer();
  var data;
  $http.get(path).then(function(response){
    data = response.data
    $q.resolve(data);
  })
  return deffered.promise;
}

var getDataCall = getData();

getDataCall.then(function(data){
console.log(data);
})
如果要重复此调用,请使用,
$interval(fn,delay,[count],[invokeApply],[Pass])

见医生

试着重复这个,(我没有试过)


您希望使用Angular的
$interval
模块来执行此操作

实际上,您有一个名为
getData
的函数,它使用
$http
模块。然后,在该承诺的解决方案中,使用新数据设置
$scope.chartData

然后在某个时间间隔调用该函数:

setInterval( function(){
    $http.get(path).then(function(response){
        console.log(response.data);
        // Update your page here
    });
}, 3000 );
$interval($scope.getData, 3000); // every 3 seconds
如果您在控制器中执行此操作,则不需要
$q
,但您可能应该将其从控制器中取出并放入服务中,然后使用
$q
模块

使用完整的Angular应用程序作为与您提供的端点一起工作的解决方案

更新:如果您想从控制器外部的外部函数调用它,您可以创建一个使用
$q
的工厂并将其注入控制器。相同的示例,但有一个工厂:


您还将注意到示例中工厂/服务的
$scope.getBytesWrite
方法。为了获取部分数据,您需要执行一个函数,仅尝试访问图表数据的属性不会更新单个值。请参阅。

要使用Angular的
$interval
模块执行此操作,请参阅

实际上,您有一个名为
getData
的函数,它使用
$http
模块。然后,在该承诺的解决方案中,使用新数据设置
$scope.chartData

然后在某个时间间隔调用该函数:

setInterval( function(){
    $http.get(path).then(function(response){
        console.log(response.data);
        // Update your page here
    });
}, 3000 );
$interval($scope.getData, 3000); // every 3 seconds
如果您在控制器中执行此操作,则不需要
$q
,但您可能应该将其从控制器中取出并放入服务中,然后使用
$q
模块

使用完整的Angular应用程序作为与您提供的端点一起工作的解决方案

更新:如果您想从控制器外部的外部函数调用它,您可以创建一个使用
$q
的工厂并将其注入控制器。相同的示例,但有一个工厂:

您还将注意到示例中工厂/服务的
$scope.getBytesWrite
方法。为了获取部分数据,您需要执行一个函数,仅尝试访问图表数据的属性不会更新单个值。请参阅。

使用
$interval
服务和
$http
服务
$http
服务返回一个承诺,您可以使用该承诺进行链接。使用
$interval
服务重复创建一个新承诺,并从该承诺中链接,将更新的数据放入范围

回报这一承诺,并从中获得链条

angular.module("myApp").controller("myVm",
  function($scope,$http,$interval) {
    var count = 0;

    function getHttpPromise(url) {
        var promise = $http.post(url);
        //return for chaining
        return promise;
    };

    function updateScope(promise) {
        //chain from promise
        promise.then (function (response) {
            count++;
            $scope.currentCount = "Current response "+count;
        });        
    };

    updateScope(getHttpPromise("/echo/json"));

    var intervalPromise =  $interval( function(){
        updateScope(getHttpPromise("/echo/json"));
    }, 1000 );

    $scope.onStopUpdate = function () {
        $interval.cancel(intervalPromise);
    });
});
上面的示例有一个函数
getHttpPromise
,该函数返回链接的承诺。
updateScope
函数从Http链接,承诺更新作用域。然后,该示例使用
$interval
服务每1000毫秒更新一次作用域

$interval
服务还返回可用于链接和取消的承诺

.

$interval
服务与
$http
服务一起使用
$http
服务返回一个承诺,您可以使用该承诺进行链接。使用
$interval
服务重复创建一个新承诺,并从该承诺中链接,将更新的数据放入范围

回报这一承诺,并从中获得链条

angular.module("myApp").controller("myVm",
  function($scope,$http,$interval) {
    var count = 0;

    function getHttpPromise(url) {
        var promise = $http.post(url);
        //return for chaining
        return promise;
    };

    function updateScope(promise) {
        //chain from promise
        promise.then (function (response) {
            count++;
            $scope.currentCount = "Current response "+count;
        });        
    };

    updateScope(getHttpPromise("/echo/json"));

    var intervalPromise =  $interval( function(){
        updateScope(getHttpPromise("/echo/json"));
    }, 1000 );

    $scope.onStopUpdate = function () {
        $interval.cancel(intervalPromise);
    });
});
上面的示例有一个函数
getHttpPromise
,该函数返回链接的承诺。
updateScope
函数