【问题标题】:angularjs handle $http.get delay [duplicate]angularjs处理$http.get延迟[重复]
【发布时间】:2016-09-13 16:42:22
【问题描述】:

我需要从本地文件中检索 xml 数据。

使用这个简单的代码:

angular.module('exampleApp', [])
.controller('ExampleController', function($scope, $http) {

    var turniOra = this;

    $http.get("/XmlTemp/turni_giorno.xml",
        {
            transformResponse: function (cnv) {
                var x2js = new X2JS();
                var aftCnv = x2js.xml_str2json(cnv);
                return aftCnv;
            }
        })
        .then(
            function(datiConve){
                turniOra.prova = datiConve.data.turni.giornata;
            }
        );

    console.log(turniOra.prova); // undefined

});

控制台日志返回“未定义”,但带有 $timeout 指令:

$timeout(function() {
    console.log(turniOra.prova);
}, 50);

我有正确的带有 xml 数据的对象。

为什么会发生这种情况,如何在没有 $timeout 的情况下获得相同的结果?

谢谢

【问题讨论】:

    标签: angularjs http get promise angular-promise


    【解决方案1】:

    这很正常。

    您的请求是通过 AJAX 完成的。这似乎你的请求是异步的。

    这是什么意思? 您的请求被发送到服务器,您的脚本将继续执行您的代码,而无需等待服务器的响应。

    所以为了你的代码正在这样做:

    • 发送http请求
    • 登录控制台
    • 获取 http 响应

    但是当你设置超时时,你已经在超时结束之前得到了 http 响应。

    您的解决方案是将您的日志添加到此函数中:

    function(datiConve){
        turniOra.prova = datiConve.data.turni.giornata;
        console.log(turniOra.prova);
    }
    

    有关 Angular 的更多信息,请查看angular promises

    这就是 $http 所使用的

    【讨论】:

      猜你喜欢
      • 2017-05-19
      • 1970-01-01
      • 1970-01-01
      • 2017-10-08
      • 1970-01-01
      • 2015-03-08
      • 1970-01-01
      • 2022-11-15
      • 2018-06-05
      相关资源
      最近更新 更多