2011-11-15 14 views
0

GoogleマップAPIを使用しています。 .keyup()で$ .getJSONを使用してアドレスをジオコーディングします。これは、キーの各タイプのマップ上の場所を示します。問題は、入力が速すぎるとフリーズすることです。これは、$ .getJSONがあまりにも短い時間でGoogle DBに何度もヒットするためです。私はdelay()を入れることを考えていた。コード上のものしかし、それは動作していないようです。ここに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秒に1つのリクエストの最大値に制限すると良いでしょう。それも可能ですか?私は様々な場所で遅延()を試みました。しかし、これまで仕事をしていないものです。

+0

[jQueryの中にキー押下の間の遅延アクション(http://stackoverflow.com/questions/2410937/delaying-actions-between-keypress-in-jquery)の可能重複 –

答えて

2

キーアップで$.getJSON()コールを3秒間実行してから、その後のキーアップで未処理のタイムアウトをキャンセルし、別のタイムアウトをキャンセルします。 JSONリクエストは最後のキーストロークの3秒後に発生します(前のリクエストから最低3秒後)。

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); 
}); 
関連する問題