2012-08-15 2 views
1

: 자바 스크립트에서 서버로 아약스 호출을 지연시키는 방법은 무엇입니까? 다음 코드

<script src="http://ajax.googleapis.com/ajax/libs/jquery/1.8.0/jquery.min.js"></script> 
<script> 
$(document).ready(function() { 
    var delay = (function() { 
     var timer = 0; 
     return function(callback, ms) { 
      clearTimeout(timer); 
      timer = setTimeout(callback, ms); 
     }; 
    })(); 

    $("div#main").on("keyup", "input[name=code]", function() { 
     delay($.getJSON("/some-url/", function(data) { 
      console.log("here"); 
     }), 2000); 
    }); 

}); 
</script> 

<div id="main"> 
    <input name="code" /> 
</div> 

사람이 내가 데이터를 서버에의 keyup 전송 지연하려고 자바 스크립트 오류

Uncaught SyntaxError: Unexpected identifier 

납니다 이유를 알고 있나요.

답변

2

당신은 그냥 잊어 버린을 발생하지 후에는 아약스 전화를 할 수 있습니다. 그냥 (다른 모든 동일하게 유지) 약간 이벤트 핸들러를 조정할 :

$("div#main").on("keyup", "input[name=code]", function() { 
    delay(function() { // <----- 
     $.getJSON("/some_url/", function(data) { 
      console.log("here"); 
     }); 
    }, 2000); 
}); 

예 :http://jsfiddle.net/f7F7c/

+0

모든 키를 누를 후 Ajax 호출을 2 초 실행됩니다 코드가 아닌 이초 입력을 중지 한 후. – Archer

+0

@Archer 나는 당신이 옳다고 생각하지 않는다 ...'clearTimeout' 호출과'delay'에서'setTimeout' 호출은 타이머를'keyup'에서 2 초로 재설정 할 것입니다. 바이올린에서 시도해보십시오. –

+0

그 코드에 대한 대체 코드가 아닙니다. 그는 단지 당신이 한 일로 그 부분을 대체해야합니다. 죄송합니다, 그것은 명확하지 않았습니다. – Archer

0

내게 자동 완성 된 것처럼 보입니까? 이 시도 대신에 ... 모든이 당신을 도울합니까

<script src="http://ajax.googleapis.com/ajax/libs/jquery/1.8.0/jquery.min.js"></script> 
<script> 
$(document).ready(function() { 
    var timer = 0; 

    function runAjax() { 
     $.getJSON("/some-url/", function(data) { 
      console.log("here"); 
     }); 
    } 

    $("div#main").on("keyup", "input[name=code]", function() { 
     clearTimeout(timer); 
     timer = setTimeout(runAjax, 2000); 
    }); 

}); 
</script> 

<div id="main"> 
    <input name="code" /> 
</div> 
0

다음의 keyup 조치가 발사 될 때마다 입력 할 때 http://jsfiddle.net/ZYXp4/8/

이 단순히 지연을 추가합니다. jsfiddle을 사용해 실제 상황을 확인하십시오. 지연이 delay 함수 정의를 전달하는 데 더 probs ^^

<input id="in" type="text"/> 
<div id="out"></div> 

var typingTimer; 
var doneTypingInterval = 1000; 

//on keyup, start the countdown 
$('#in').keyup(function(){ 
    clearTimeout(typingTimer); 
    if ($('#in').val) { 
     typingTimer = setTimeout(function(){ 
      //do stuff here e.g ajax call etc.... 
      var v = $("#in").val(); 
      $("#out").html(v); 
     }, doneTypingInterval); 
    } 
}); 
관련 문제