2016-08-11 16 views
0

ajaxリクエストの外部にグローバル変数を作成しました。 var pos = [];私のAPIから来る特定の "仕事"の緯度と経度の情報を収集します。 "Jobs"には、各ジョブのデータ配列(var Jobs = [];)を収集するためのajaxリクエストの外側にあるグローバル変数もあります。 Ajaxリクエストの中で、汎用のJobs = dataを使用して、成功時にリクエストで収集されるデータに変数値を設定しました(success: function (data) {Jobs = data; ...)。次に、Jobs.forEachループを使用して各ジョブを反復処理します。 pos変数には、ジョブごとに作成されたマーカーのリーフレットメソッド.getLatLngを使用して値が与えられます。私の問題は、私がposという変数(私はconsole.log(pos);を使ってテストしています)をforEachループの外で呼び出そうとすると、最後のインスタンスだけを吐き出すことになります。私が間違っていることに関する提案はありますか?私の単純化されたコードは以下の通りです。注:別のリクエストの中でposを呼び出そうとしていますが、グローバルJobs変数で正常に動作します。グローバル変数は、ループ内の最後のインスタンスの値のみを返します。

var grid = L.geoJson(); 
var Jobs = {}; 
var pos = []; 

//var control = L.control.layers(grid).addTo(map); 
// This is the ajax request for the jobs data 
$.ajax({ 
    type: 'GET', 
    url: url, 
    timeout: 8000, 
    crossDomain: true, 
    dataType: 'json', 
    data: Jobs, 
    ... 

    //Renders data to view 
    success: function (data) { 
    Jobs = data; 
    Jobs.forEach(function (value) { 
     console.log (pos); 
     ... 
     var latitude = value.latitude; 
     var longitude = value.longitude; 
     ... 

     var marker = L.marker([value.latitude, value.longitude]).addTo(map); 
     pos = marker.getLatLng(); 
     ... 
     console.log (pos); 
    }); 

    // Fetch the file data making the grid  
    $.getJSON('./grid.geojson', function (data) { 
     // Assign the results to the geojsonData variable 

     console.log(Jobs); 
     console.log(pos); 

答えて

4

新しいマーカーを使用するたびにpos変数に上書きされます。 pos = marker.getLatLng();

代わりに、あなたがこの配列

pos.push(marker.getLatLng()); //['marker1'] 

にしてそれぞれの新しい値を追加します次に、ループが実行される次回は、次のマーカーが

を追加され、配列に新しい値を .pushする必要があります完全に働いた
pos.push(marker.getLatLng()); //['marker1', 'marker2'] 

https://developer.mozilla.org/en/docs/Web/JavaScript/Reference/Global_Objects/Array/push

+0

、ありがとう!私は 'grid.getBounds()。contains(pos)'でそれを使って、ポイントがグリッド内にあるかどうか調べることができます。結果を格納する配列を持つ別の変数を作成しました。今私はちょうどこの情報で何をすべきかを理解する必要があります! – jcbridwe

+0

よかった、うれしかったよ! :) – iamalismith

関連する問題