2016-01-28 18 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