2014-05-14 67 views
0

我對此感到瘋狂。在地理編碼中修改Javascript中的全局變量

 geocoder.geocode({ 'address': address}, function(results, status) { 

     if (status == google.maps.GeocoderStatus.OK) { 

      latitude = results[0].geometry.location.lat(); 
      longitude = results[0].geometry.location.lng(); 
      locations[j][0] = direcciones[j]['1']; 
      locations[j][1] = latitude; 
      locations[j][2] = longitude; 
      locations[j][3] = direcciones[j]['10']; 
      j++; 

     } 
     }); 

如果我的位置的警告[0] [0]的地址解析函數內部,它工作正常,但如果我這樣做了,我得到的前值,因爲我不修改全局位置變量。 ..

有人可以幫助我正確地確定這個變量嗎?

回答

0

...但如果我這樣做了,我得到的前值,因爲我不修改全局變量的位置...

是的,它是,它只是做。對geocode的呼叫是異步,因此在回調完成之前不會看到結果。 geocode函數調用後立即執行代碼之前回調運行,所以你不會看到任何改變。

讓我們用一個簡單的例子來加以說明:

// A variable we'll change 
var x = 1; 

// Do something asynchronous; we'll use `setTimeout` but `geocode` is asynchronous as well 
setTimeout(function() { 
    // Change the value 
    x = 2; 
    console.log(Date.now() + ": x = " + x + " (in callback)"); 
}, 10); 
console.log(Date.now() + ": x = " + x + " (immediately after setTimeout call)"); 

如果運行(fiddle),你會看到這樣的事情:

1400063937865: x = 1 (immediately after setTimeout call) 
1400063937915: x = 2 (in callback)

注意發生了什麼第一。

+0

謝謝你的回答。我會做一個jQuery函數,我會取得成功。這是我知道的唯一方法。 謝謝! – user3592436