我正在使用谷歌地图API。我在.keyup()上使用$ .getJSON来对地址进行地理编码。这将显示每种键类型在地图上的位置。问题是,如果你输入太快,它会冻结。这是因为$ .getJSON在太短的时间内击中了Google DB太多次了。我在想延迟();或代码上的东西。但是,它似乎不起作用。这是jQuery:
$('#create_loc_input').keyup(function() {
var loc = $('#create_loc_input').val();
$.getJSON('http://localhost/app/search/search.json.php?loc='+loc, function(data) {
lat = data.results[0].geometry.location.lat;
lng = data.results[0].geometry.location.lng;
$.post('app/create_page/func/create_page_messages.func.php', {
lat:lat,
lng:lng,
},
function(data) {
$('#create_latlng').html(data);
codeAddress();
});
});
});
代码显然还有很多。但是,在这里,我怎么能将查询限制为每3秒左右。有点像sudo keyup()。将$ .getJSON限制为每3秒最多一个请求将是不错的。这甚至可能吗?我在各个地方尝试过delay()。但是,到目前为止还没有完成这项工作。
答案 0 :(得分:2)
在密钥上使用setTimeout()
来安排$.getJSON()
呼叫三秒钟,然后在后续密钥上取消任何未完成的超时并设置另一个。这样,JSON请求仅在最后一次击键后三秒钟发生(并且在上一次请求后至少三秒钟)。
var timeoutID = null;
$('#create_loc_input').keyup(function() {
if (timeoutID != null)
clearTimeout(timeoutID);
timeoutID = setTimeout(function() {
timeoutID = null;
// all of your other code here
}, 3000);
});