当发生太多$ .getJSON请求时,keyup函数会冻结页面

时间:2011-11-15 04:56:19

标签: php javascript jquery json

我正在使用谷歌地图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()。但是,到目前为止还没有完成这项工作。

1 个答案:

答案 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);
});