【问题标题】:Can't display data captured through Json in for loop无法在for循环中显示通过Json捕获的数据
【发布时间】:2021-07-17 03:55:50
【问题描述】:
        $.getJSON("https://example.com//json/", function (data) {
        var count = Object.keys(data).length;
          for (var i = 0; i < count; i++) {
              var lat = data[i].LAT;
              var lng = data[i].LNG;
              var locs = { lat: lat, lng: lng };
              var check = arePointsNear(pos, locs, 2487);
              if (check) listStations.push(data[i].ID); 
          }
          console.log(listStations);
          console.log(listStations[0]);
        }); 

        function arePointsNear(checkPoint, centerPoint, m) { 
           var km = m/1000;
           var ky = 40000 / 360;
           var kx = Math.cos(Math.PI * centerPoint.lat / 180) * ky;
           var dx = Math.abs(centerPoint.lng - checkPoint.lng) * kx;
           var dy = Math.abs(centerPoint.lat - checkPoint.lat) * ky;
           return Math.sqrt(dx * dx + dy * dy) <= km;
        }

数据中的json示例;

{
    "ID": 359,
    "NAME": "Atatürk Bulvarı 1",
    "LOCATION": "0001 Atatürk Bulvarı 1",
    "PARK_INFO": "2",
    "PARK_CAPACITY": 18,
    "START_TIME": {
      "Ticks": 270000000000,
      "Days": 0,
      "Hours": 7,
      "Milliseconds": 0,
      "Minutes": 30,
      "Seconds": 0,
      "TotalDays": 0.3125,
      "TotalHours": 7.5,
      "TotalMilliseconds": 27000000,
      "TotalMinutes": 450,
      "TotalSeconds": 27000
    },
    "FINISH_TIME": {
      "Ticks": 666000000000,
      "Days": 0,
      "Hours": 18,
      "Milliseconds": 0,
      "Minutes": 30,
      "Seconds": 0,
      "TotalDays": 0.77083333333333326,
      "TotalHours": 18.5,
      "TotalMilliseconds": 66600000,
      "TotalMinutes": 1110,
      "TotalSeconds": 66600
    },
    "DISTRICT_CODE": "20",
    "ADRESS": "KEMALPAŞA MAHALLESİ ATATÜRK BULVARI 1 / EMİNÖNÜ",
    "LNG": 28.9535382991555,
    "LAT": 41.0112914996693,
    "SUBS_PRICE": 0,
    "FREE_TIME": 15
  }

可以从相关链接拉取json数据。将数据发送到 arePointsNear 函数并验证真假就可以了。当我写console.log数据写在最底线(in for)的代码中时,0.index是未定义的。

顺便说一句,变量在顶部是独立且全局定义的。

我该怎么办?

【问题讨论】:

  • 请提供data的例子。
  • 我已经添加了 arePointsNear 函数和示例 json 数据
  • pos 定义在哪里?
  • 在用户登录时查询当前位置(latlng),但全局定义为var pos
  • 这与您的问题没有直接关系,但它是一个有用的提示,可以更快地比较很多距离:您可以通过比较平方距离来避免调用 Math.Sqrt() 。初始化var km2 = m * m / 1000000; 然后return dx * dx + dy * dy &lt;= km2;。如果您以米而不是公里为单位计算 dx 和 dy,您也可能会减少一些数学运算。只是提醒一下。

标签: javascript jquery json web


【解决方案1】:

您可以考虑使用$.each()。假设你 data 是一个对象数组,请考虑这个例子。

$(function() {
  function arePointsNear(checkPoint, centerPoint, m) {
    var km = m / 1000;
    var ky = 40000 / 360;
    var kx = Math.cos(Math.PI * centerPoint.lat / 180) * ky;
    var dx = Math.abs(centerPoint.lng - checkPoint.lng) * kx;
    var dy = Math.abs(centerPoint.lat - checkPoint.lat) * ky;
    return Math.sqrt(dx * dx + dy * dy) <= km;
  }

  var pos;
  var listStations = [];

  $.getJSON("https://example.com/json/", function(data) {
    $.each(data, function(index, location) {
      if (arePointsNear(pos, {
          lat: location.LAT,
          lng: location.LNG
        }, 2487)) {
        listStations.push(location.ID);
      }
    });
    console.log(listStations);
  });
});
&lt;script src="https://cdnjs.cloudflare.com/ajax/libs/jquery/3.3.1/jquery.min.js"&gt;&lt;/script&gt;

【讨论】:

  • 在同一个地方,数字 [0]。 [1]。继续不显示他们的项目。
  • 顺便说一下,它显示在json循环中,但它没有显示在循环之外,无法访问数据
  • @KadirÇolak 因为它们是在循环回调函数中定义的,所以它们仅适用于此。您只需将每个位置的 ID 添加到 listStations,因此这是循环外唯一可访问的项目。
猜你喜欢
  • 1970-01-01
  • 2019-09-08
  • 1970-01-01
  • 1970-01-01
  • 2015-10-12
  • 1970-01-01
  • 2018-04-22
  • 2019-07-08
  • 2018-03-26
相关资源
最近更新 更多