我遇到一种情况,我正在使用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"
}
});
}
答案 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
}