jquery - 如何跳出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"
}
});
}
解决方案
利用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
}
推荐阅读
- javascript - 使用带有条件渲染的 refs
- angular - rxjs:EmptyError:序列中没有元素
- ruby-on-rails - Rails Active Admin 基本错误 - 将直接锚链接添加到有错误的字段
- ruby-on-rails - Rails redirect_to 在使用 Turbolinks 时不起作用
- javascript - Javascript / Typescript:Array.prototype.map 函数中的新类实例不持久
- javascript - 使用“inspect”(字符串!)调用代理获取陷阱
- node.js - 集群和分叉是一样的吗?
- matlab - 在 MATLAB 中查找 2 列数组中的第一个零行
- .net - .net 核心异步/等待 tcp 与 linux
- c# - 如何在 xamarin 表单中为框架提供阴影效果