Как мне отложить запрос AJAX? - PullRequest
1 голос
/ 09 августа 2011

как этот код jquery, как мне отложить запрос ajax? ввод - текстовое поле ... над моей головой ... спасибо за помощь ...

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 ]

3 голосов
/ 09 августа 2011

Вы хотите использовать 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 голос
/ 09 августа 2011

Я вижу, вы выполняете какую-то функцию автоматического поиска / автозаполнения.

Рассматривали ли вы только использование автозаполнения пользовательского интерфейса jQuery? http://jqueryui.com/demos/autocomplete/#remote-jsonp

Что касается самого вопроса, то вам уже ответили.

0 голосов
/ 09 августа 2011
 $("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);    
}) ;
0 голосов
/ 09 августа 2011

Использование 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);
});
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...