2016-09-13 17 views
0

ローカルファイルから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(function() { 
    console.log(turniOra.prova); 
}, 50); 

私は、XMLデータとの正しいオブジェクトを持っています。

なぜこのようなことが起こり、$ timeoutなしで同じ結果が得られるのですか?

ありがとうございました

答えて

1

これは正常です。

あなたのリクエストはAJAX経由で行われます。これはあなたが非同期であると思われるようです。

この意味は? あなたのリクエスタがサーバーに送信され、サーバーからの応答を待たずにコードを実行し続けます。

だからために、あなたはそれを、コードをやっているしている:

  • は、あなたがタイムアウトを入れたときに、HTTPレスポンスに

を取得しかし、コンソール

  • にHTTPリクエスト
  • ログを送信しますタイムアウトが終わる前にすでにhttp応答を取得しています。

    あなたしているソリューションは、この機能にあなたのログを追加するために、次のようになります、角度でこの詳細については

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

    これは、$ HTTPが使用したものであるangular promises

    を見てみましょう