如何突破Jquery进行迭代

时间:2019-03-08 21:55:02

标签: jquery

我遇到一种情况,我正在使用AJAX调用返回返回营业地点列表以填充Google地图的页面。我的最初目标是显示半径与网站访问者的位置相关的位置的标记。

现在,我只需要知道网站访问者是否在ajax调用返回的任何位置的半径范围内即可。在下面的代码中,您将看到一个条件语句“ fink <= rs.Records [recno] .radius”。我试图做的是该语句第一次执行为true,设置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"
    }
  });
}

1 个答案:

答案 0 :(得分:3)

使用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
  }