2012-08-15 32 views
1

對於下面的代碼:如何在javascript中將ajax調用延遲到服務器?

<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> 

有誰知道爲什麼我得到了JavaScript錯誤

Uncaught SyntaxError: Unexpected identifier 

我試圖拖延數據發送KEYUP到服務器。

回答

2

你只是忘記之後通過delay函數定義。只要調整您的事件處理程序略(一切保持不變):

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

例子:該代碼將在每次按鍵後運行Ajax調用2秒,不停止打字後http://jsfiddle.net/f7F7c/

+0

2秒。 – Archer 2012-08-15 16:31:13

+0

@Archer我不認爲你是正確的......在'delay'中,'clearTimeout'調用後面跟着'setTimeout'會使計時器從'keyup'重置兩秒鐘。隨意嘗試在小提琴:) – 2012-08-15 16:32:05

+0

我看到 - 這不是他的代碼替換代碼。他只需要用你所做的一切來取代它的一部分。對不起,那還不清楚。 – Archer 2012-08-15 16:34:13

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

這是否幫助你在所有的:http://jsfiddle.net/ZYXp4/8/

每個KEYUP動作點火時間打字的時候這只是增加了延遲。嘗試jsfiddle,看看它在行動。你可以做你的Ajax調用延遲發生沒有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); 
    } 
}); 
相關問題