AngularJS:不使用$http服务异步AJAX请求的正确方法是什么

AngularJS:不使用$http服务异步AJAX请求的正确方法是什么,angularjs,angularjs-service,Angularjs,Angularjs Service,假设我们有一些从服务器获取数据的服务。它是异步的,不使用AngularJS$http服务 当我们在Angular中处理异步内容时,我们使用$q承诺。但有一个问题:承诺只有在$digest之后才能得到解决 有两种可能的修复方法: 1) $timeout 2) $rootScope.$apply() 在AngularJS$http服务中,使用了第二个变量 两者之间的区别是什么?正确的方法是什么 您可以在实际操作中尝试这两种方法:如果您可以使用$q,为什么不能使用$http?如果您可以使用$qI,您

假设我们有一些从服务器获取数据的服务。它是异步的,不使用AngularJS$http服务

当我们在Angular中处理异步内容时,我们使用
$q
承诺。但有一个问题:承诺只有在
$digest
之后才能得到解决

有两种可能的修复方法:

1)
$timeout

2)
$rootScope.$apply()

在AngularJS
$http
服务中,使用了第二个变量

两者之间的区别是什么?正确的方法是什么


您可以在实际操作中尝试这两种方法:

如果您可以使用$q,为什么不能使用$http?如果您可以使用$qI,您应该将代码重构为使用$http。您将选择第一种解决方案。项目太大太旧。我们将很快重写API模块:)问题是关于在没有$http的情况下使用AJAX请求:)我想很多项目都有自己的json rpc模块实现或类似的东西,无法轻松替换整个项目:)部分代码是在没有AngularJS的情况下编写的:)在示例1中甚至没有使用$timeout。。。?如果1。工作正常,它是更好的选择,因为defer.resolve自然会启动摘要循环,这比手动启动更可取。
var defer = $q.defer();
$.getJSON('http://example.com/my.json')
    .success(function (data) {
       $timeout(function () {
         defer.resolve(data);
       });
    });
return defer.promise;
var defer = $q.defer();
$.getJSON('http://example.com/my.json')
    .success(function (data) {
       defer.resolve(data);
    });
if (!$rootScope.$$phase) $rootScope.$apply();