我该如何延迟ajax请求?

时间:2011-08-09 06:37:42

标签: javascript jquery ajax

像这个jquery代码一样,我应该如何延迟ajax请求?输入是一个文本字段......在我的头上...... thx寻求帮助......

var proname = "" ;
$("input[name='proname']").keyup(function(e){
    //how should i delay this function on here ?
    if (e.which == 13) return ;
    if ($(this).val() != proname)
    {
         proname = $(this).val() ;
    }
    else
    {
     return ;
    }
    $.ajax({
         type: "post",
         data: "proname="+proname+"&page=1",
         url: "/project/searchrate",
         success: function(view){
             alert(view) ;
         }
    }) ;
}) ;

4 个答案:

答案 0 :(得分:3)

您想使用setTimeout

根据您的使用情况,每次发生另一个keyup事件时都要清除超时似乎是一个好主意,以避免出现队列。

var requestDelay;
var proname;

$('input[name=proname]').keyup(function() {

   if(e.which == 13 || $(this).val() == proname)
      return;

   proname = $(this).val();

   // postpone the submit another 300 ms upon every new character
   window.clearTimeout(requestDelay);  

   requestDelay = window.setTimeout(function() {
      $.ajax(...);
   }, 300);


});

答案 1 :(得分:1)

我发现你正在做某种自动搜索/自动完成功能。

您是否考虑过使用jQuery UI自动完成功能? http://jqueryui.com/demos/autocomplete/#remote-jsonp

至于问题本身,你已经得到了解答。

答案 2 :(得分:0)

使用setTimeout

var proname = "" ;
$("input[name='proname']").keyup(function(e){
    if (e.which == 13) return;
    setTimeout(function() {
        if ($(this).val() != proname) {
            proname = $(this).val();
        } else {
            return;
        }
        $.ajax({
            type: "post",
            data: "proname="+proname+"&page=1",
            url: "/project/searchrate",
            success: function(view){
                alert(view) ;
            }
       });
    }, DELAY_IN_MSECS);
});

答案 3 :(得分:0)

 $("input[name='proname']").keyup(function(e){
        //how should i delay this function on here ?
        if (e.which == 13) return ;
    setTimeout(function() {
        if ($(this).val() != proname)
        {
             proname = $(this).val() ;
        }
        else
        {
         return ;
        }
        $.ajax({
             type: "post",
             data: "proname="+proname+"&page=1",
             url: "/project/searchrate",
             success: function(view){
                 alert(view) ;
             }
        }) ;

        }, 1000);    
}) ;