2016-01-28 19 views
0

我想將數據推送到一個數組,但由於AJAX的異步性,我不確定如何去做這件事。如何使用JQuery getJSON運行成功函數?

我似乎無法找到完整的示例在線方式,這與getJSON完成。

我一直在關注,沒有運氣/文檔here

我曾嘗試:

var jsonLtdLng="https://maps.googleapis.com/maps/api/geocode/json?address=" + addressval; 
var latlng; 

$.getJSON(jsonLtdLng, function (data) { 
    var lat = data.results[0].geometry.location.lat; 
    var lng = data.results[0].geometry.location.lng; 

    latlng = {lat: lat, lng: lng}; 

}).done(function() { 
    markerlocations.push(latlng); 
})//END JSON 

和:

VAR jsonLtdLng =「https://maps.googleapis.com/maps/api/geocode/json?address =「+ addressval; var latlng;

$.getJSON(jsonLtdLng, function (data) { 
    var lat = data.results[0].geometry.location.lat; 
    var lng = data.results[0].geometry.location.lng; 

    latlng = {lat: lat, lng: lng}; 
    markerlocations.push(latlng); 
}); 

及其變化,沒有結果。

有人會知道這樣做的正確方法,並可以指出我在正確的方向嗎?

回答

0

您需要將push()添加到success處理程序中的數組中,該處理程序可以訪問請求返回的數據。你最好將對象添加到數組中,而不是手動繞過JSON字符串。從那裏你可以將數組傳遞給你需要執行的任何函數。試試這個:

var markerlocations = []; 
$.getJSON(jsonLtdLng, function (data) { 
    var lat = data.results[0].geometry.location.lat; // note 'lat' here, not 'lng' 
    var lng = data.results[0].geometry.location.lng; 
    markerlocations.push({ lat: lat, lng: lng }); 
    doSomethingWithTheArray(markerlocations); 
}); 

function doSomethingWithTheArray(arr) { 
    for (var i = 0; i < arr.length; i++) { 
     console.log(arr[i].lat, arr[i].lng); 
    } 
} 
+0

我覺得這太 - 它是有道理的把推那裏,但它只是不工作這種方式是(增加了我上面使用的代碼)。 – MeltingDog

+0

您是否檢查了網絡控制檯以確保請求正常工作? –

+0

是的,我可以console.log()lat和lng並看到正確的結果 – MeltingDog

0

試試這個。使用foreach來創建你的數組。然後按您想要的方式推/追加數組。

$.getJSON("url here", function(data) { 
     $.each(data, function(key, value){ 

      // your custom code here 
      var latlng = 'code you want'; 

     }); 
     markerlocations.push(latlng); 
    }); 
+0

這給了我同樣的錯誤,因爲我的代碼('latlng'未定義)。 – MeltingDog

0

您需要在getJSON()函數之外聲明一個空數組。然後它可以在getJSON回調中訪問。

var markerlocations = []; 
$.getJSON(jsonLtdLng, function (data) { 
    var lat = data.results[0].geometry.location.lat; 
    var lng = data.results[0].geometry.location.lng; 
    markerlocations.push({ lat: lat, lng: lng }); 
}); 

function(data)...是獲得響應後執行的回調函數。在這種情況下,您不需要另一個done()方法。

var jsonLtdLng="https://maps.googleapis.com/maps/api/geocode/json?address=new york"; 
 
var latlng; 
 
var markerlocations = []; 
 
$.getJSON(jsonLtdLng, function (data) { 
 
    var lat = data.results[0].geometry.location.lat; 
 
    var lng = data.results[0].geometry.location.lng; 
 

 
    latlng = {lat: lat, lng: lng}; 
 
    markerlocations.push(latlng); 
 
    
 
    // just for testing 
 
    for(var i = 0; i < markerlocations.length; i++){ 
 
    alert(markerlocations[i].lat + '===' + markerlocations[i].lng); 
 
    } 
 
});
<script src="https://ajax.googleapis.com/ajax/libs/jquery/2.1.1/jquery.min.js"></script>

+0

對不起,是的,在函數外部有一個空數組。我只是沒有包含在我的例子中。我proeviously正是你在這裏,但它不起作用 – MeltingDog

+0

@MeltingDog你正確地得到lat和lng的價值? –

+0

@JodyJoseph是的 - 我可以console.log他們罰款 – MeltingDog