【问题标题】:How to run success function with JQuery getJSON?如何使用 JQuery getJSON 运行成功函数?
【发布时间】:2016-01-28 11:38:15
【问题描述】:

我想将数据推送到数组,但由于 AJAX 的异步性,我不确定如何处理。

我似乎无法在网上找到使用 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);
});

以及没有结果的变体。

有谁知道这样做的正确方法并能指出正确的方向吗?

【问题讨论】:

    标签: javascript jquery json ajax getjson


    【解决方案1】:

    您需要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);
        }
    }
    

    【讨论】:

    • 我也这么认为 - 将推送放在那里是有意义的,但是它也不能以这种方式工作(添加了我上面使用的代码)。
    • 您是否检查了网络控制台以确保请求正常工作?
    • 是的,我可以通过 console.log() lat 和 lng 看到正确的结果
    【解决方案2】:

    试试这个。使用 foreach 创建您的数组。然后根据需要推送/附加数组。

        $.getJSON("url here", function(data) {
           $.each(data, function(key, value){
    
               // your custom code here
               var latlng = 'code you want';
    
           });
           markerlocations.push(latlng);
       }); 
    

    【讨论】:

    • 这给了我与我的代码相同的错误('latlng' 未定义)。
    【解决方案3】:

    您需要在 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);
      }
    });
    &lt;script src="https://ajax.googleapis.com/ajax/libs/jquery/2.1.1/jquery.min.js"&gt;&lt;/script&gt;

    【讨论】:

    • 对不起,是的,函数外部声明了一个空数组。我只是没有将它包含在我的示例中。我以前拥有你在这里所拥有的,但它不起作用
    • @MeltingDog 您是否正确获取了 lat 和 lng 的值?
    • @JodyJoseph 是的 - 我可以 console.log 他们很好
    • @MeltingDog 你添加了 var markerlocations = []; getJSON 之前的行?只是为了确认。
    • @JodyJoseph,是的,它在最顶端
    猜你喜欢
    • 2023-03-30
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2019-04-13
    • 2016-02-26
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多