首页 > 解决方案 > 如何跳出Jquery进行迭代

问题描述

我有一种情况,我正在使用 AJAX 调用返回业务位置列表以填充 Google 地图的页面。我最初的目标是为半径触及网站访问者位置的位置显示标记。

现在我只需要知道网站访问者是否在 ajax 调用返回的任何一个位置的半径范围内。在下面的代码中,您会看到一个条件语句“fink <= rs.Records[recno].radius”。我试图做的是该语句第一次执行为真,设置一个cookie和/或调用一个函数并退出for循环。

作为一个附带问题,一位朋友告诉我一个叫做 grep 的东西(我认为)。我是否需要遍历整个列表以查找该条件是否为真?这意味着我知道在 mySQL 中我可以只查询诸如“从半径 < 50 的位置选择 *”之类的内容。因此,如果我的 ajax 返回 10,000 个位置,我只需要知道我的网站访问者在我的任何位置半径内的距离吗?

提前感谢您的帮助。

function distance(lat1, lon1, lat2, lon2) {
  var p = 0.017453292519943295; // Math.PI / 180
  var c = Math.cos;
  var a = 0.5 - c((lat2 - lat1) * p) / 2 +
    c(lat1 * p) * c(lat2 * p) *
    (1 - c((lon2 - lon1) * p)) / 2;
  return .62137119 * (12742 * Math.asin(Math.sqrt(a))); // 2 * R; R = 6371 km
}


function getMarkers(lat, lng, city, state) {
  $.ajax({
    url: '/getMarkers.asp?state=Nebraska',
    type: 'GET',
    dataType: 'text',
    error: function(xhr, status, errorstr) {
      console.log(errorstr); // just show error message in console if there was an error
    },
  }).done(function(response_obj) {
    console.log(response_obj);
    var rs = eval(response_obj);
    if (rs) { // has a non-null value
      var str = rs.RecordCount + " Users:<br/>";

      for (var recno = 0; recno < rs.RecordCount; recno++) {
        fink = distance(<%= session("uLat") %>, <%= session("uLng") %>, rs.Records[recno].latitude, rs.Records[recno].longitude);
        if (fink <= rs.Records[recno].radius) {
          $(".markers").append("<li data-center='" + rs.Records[recno].latitude + ", " + rs.Records[recno].longitude + "' data-locale='" + recno + "' data-radius='" + rs.Records[recno].radius + "' data-location='" + rs.Records[recno].city + "'>" + rs.Records[recno].street + "</li>\n");
        }
      }
      initMap();
    } else {
      str = "No users found"
    }
  });
}

标签: jquery

解决方案


利用break;

  for (var recno = 0; recno < rs.RecordCount; recno++) {
    fink = distance(<%= session("uLat") %>, <%= session("uLng") %>, rs.Records[recno].latitude, rs.Records[recno].longitude);
    if (fink <= rs.Records[recno].radius) {
      $(".markers").append("<li data-center='" + rs.Records[recno].latitude + ", " + rs.Records[recno].longitude + "' data-locale='" + recno + "' data-radius='" + rs.Records[recno].radius + "' data-location='" + rs.Records[recno].city + "'>" + rs.Records[recno].street + "</li>\n");
      break;
    }
  }

如果你想知道是否找到了任何东西,你可以设置一个变量。

  found_close = false;
  for (var recno = 0; recno < rs.RecordCount; recno++) {
    fink = distance(<%= session("uLat") %>, <%= session("uLng") %>, rs.Records[recno].latitude, rs.Records[recno].longitude);
    if (fink <= rs.Records[recno].radius) {
      $(".markers").append("<li data-center='" + rs.Records[recno].latitude + ", " + rs.Records[recno].longitude + "' data-locale='" + recno + "' data-radius='" + rs.Records[recno].radius + "' data-location='" + rs.Records[recno].city + "'>" + rs.Records[recno].street + "</li>\n");
      found_close = true;
      break;
    }
  }
  if (!found_close) {
    // do something
  }

推荐阅读