2017-11-13 4 views
2

配列を作成しました。 settimeoutでajaxリクエストを送信したい。しかし、私はsettimeoutでパラメータを取得することはできません。コンソールログ変数を出力するとき、iは定義されていません。どうすればこの問題を解決できますか?forループのsetTimeoutパラメータを渡します。

コンソールログ、それをカプセル化するためのsetTimeoutの3番目の引数として私を追加

i undefined 

Javascriptのコード

$scope.type = ["st", "ct", "sc", "rm", "bg", "sf", "fl", "sq", "pr", "cr", "vl", "fd"]; 

for (var i = 0; i < $scope.type.length; i++) { 
    setTimeout(function (i) { 
     console.log("i", i); 
     $scope.params = { 
      lat: $scope.lat, 
      lng: $scope.lng, 
      time: $scope.time, 
      type: $scope.type[i] 
     } 
     console.log("params", $scope.params); 
     return; 
     $.ajax({ 
      type: 'post', 
      url: "bz.php", 
      dataType: 'json', 
      async: true, 
      cache: false, 
      data: $scope.params, 
      success: function (data) { 
       if (data.response) { 
        console.log("data.response", data.response); 
        return; 
        if (!$scope.$$phase) $scope.$apply(); 
       } else if (data.response == null) { 

       } else if (data.error) { 

       } 
      }, 
      error: function (data) { 
      } 
     }); 
    }.bind(this), i * 2000); 
} 

答えて

4

あなたはしないでください必要があります.bind()。 ... varの代わりに

const $scope = {}; 
 
$scope.type = ["st", "ct", "sc", "rm", "bg", "sf", "fl", "sq", "pr", "cr", "vl", "fd"]; 
 

 
for (let i = 0; i < $scope.type.length; i++) { 
 
    setTimeout(function() { 
 
     console.log("i", i); 
 

 
     // your code 
 

 
    }, i * 2000); 
 
}

か、単にsetTimeoutへの追加の引数としてiを渡すをletconstを使用しますか。

const $scope = {}; 
 
$scope.type = ["st", "ct", "sc", "rm", "bg", "sf", "fl", "sq", "pr", "cr", "vl", "fd"]; 
 

 
for (var i = 0; i < $scope.type.length; i++) { 
 
    setTimeout(function (i) { 
 
     console.log("i", i); 
 

 
     // your code 
 

 
    }, i * 2000, i); 
 
}

4

を引き起こす:

setTimeout(function(i){ // <-- ... and retrieved here again 
    console.log(i); 
}, i * 2000, i);// <--- i is stored here ... 
関連する問題