2016-07-20 10 views
0

私はjson形式のサーバーからデータを取得しようとしています。javascriptコードが順番に実行されない

for (var i = 0; i < jsonHosts.length; i++) { 
      console.log("dog"); 
      console.log(jsonHosts[i].host.status); 
      document.getElementById('test').innerHTML += "<br>" + jsonHosts[i].host.status; 
      document.getElementById('test').innerHTML += '<br>Some new content!'; 
     } 
     console.log("done"); 

問題があり、このコードブロックに続いて、このコード

for (var i = 0; i < hosts.length; i++) { 
    var tempUrl = url + hosts[i]; 
    jQuery.ajax({ 
     type : "GET", 
     dataType : "json", 
     username : "user", 
     password : "password", 
     url : url, 
     async : true, 
     success : function (data) { 
      //var obj = data.data.host.status; 
      //console.log(obj); 
      jsonHosts.push(data.data); 
      console.log("added data"); 
     } 
    }); 
} 

は、私のコンソールには、「完了」し、「追加データ」と表示されますと、私のWebページが空白になります。

私は、関数の最初の部分を入れて実行したが、無駄に終了する機能を待つために私のコードを取得しようと試みました。成功の機能は、あなたのループの後に実行されるよう

とにかく、私はこのコードを実行させることができために/最初のブロック

+0

:これを試してみてください。 AJAXリクエストが完了すると、 "success"関数が呼び出されます。そこでは、実行されているリクエストに依存するコードを記述する必要があります。管理しやすくすると、別の機能を指すことができます。 – moopet

+1

非同期呼び出し...あなたがしたことは、オンラインでピザを注文したことです。あなたが提出を押すとすぐに、あなたの家に届けられていないピザを食べようとします。 – epascarello

+0

Asyncを無効にすると、問題が解決しました。 私はweb devを初めて使いました。 助けてくれてありがとう –

答えて

1

成功コールバック関数へのコードの一部を以下に移動

success : function (data) { 
    //var obj = data.data.host.status; 
    //console.log(obj); 
    jsonHosts.push(data.data); 
    for (var i = 0; i < jsonHosts.length; i++) { 
     console.log("dog"); 
     console.log(jsonHosts[i].host.status); 
     document.getElementById('test').innerHTML += "<br>" +  jsonHosts[i].host.status; 
     document.getElementById('test').innerHTML += '<br>Some new content!'; 
    } 
    console.log("done"); 
} 
+0

再び –

+0

答えをチェックし、データがすべてのAjax呼び出しに複製されるだろう、まず、アヤックスは、あなたがアレイとループに追加呼び出します。もう1つは追加してループするので、最初のアイテムが再び追加されます。どのように選択された答え.... – epascarello

0

上の第二のブロックの待機を持っているアヤックスは非同期です。これは、コールバックの全体のポイントです

for (var i = 0; i < hosts.length; i++) { 
     var tempUrl = url + hosts[i]; 
     jQuery.ajax({ 
      type : "GET", 
      dataType : "json", 
      username : "user", 
      password : "password", 
      url : url, 
      async : true, 
      success : function (data) { 
       //var obj = data.data.host.status; 
       //console.log(obj); 

      console.log("done"); 
       jsonHosts.push(data.data); 
       console.log("added data"); 
       DataCame(jsonHosts); 
      } 
     }); 
    } 

function DataCame(jsonHosts){ 
for (var i = 0; i < jsonHosts.length; i++) { 
        console.log("dog"); 
        console.log(jsonHosts[i].host.status); 
        document.getElementById('test').innerHTML += "<br>" + jsonHosts[i].host.status; 
        document.getElementById('test').innerHTML += '<br>Some new content!'; 
       } 
} 
+0

そしてOPには重複した結果があります。 – epascarello

+0

これはデモのケースで、データをフェッチして処理してから、この方法でプリントアウトする予定だからそれがでてくるようなデータのみで作業することができます。 –

関連する問題