Как вывести ajax на onkeyup с помощью jquery - PullRequest
13 голосов
/ 12 апреля 2011

Мой скрипт для вызова ajax

<script language="javascript">
function search_func(value)
{
    $.ajax({
       type: "GET",
       url: "sample.php",
       data: {'search_keyword' : value},
       dataType: "text",
       success: function(msg){
                   //Receiving the result of search here
       }
    });
}
</script>

HTML

   <input type="text" name="sample_search" id="sample_search" onkeyup="search_func(this.value);">

Вопрос: пока он включен Я использую ajax для получения результата. Как только задержка результата ajax увеличивается, у меня возникает проблема.

Например При вводе ключевого слова t я получаю результат ajax, а при наборе te я получаю результат ajax когда задержка ajax между двумя keyup иногда делает серьезную проблему.

Когда я быстро набираю te. ajax поиск по ключевому слову t опаздывает, если сравнивать с te. Я не знаю, как обращаться с такими случаями.

Результат При быстром наборе ключевого слова te из-за задержек ajax. результат для ключевого слова t.

Кажется, я объяснил читателю знание.

Ответы [ 5 ]

44 голосов
/ 12 апреля 2011

Вы должны проверить, изменилось ли значение с течением времени:

var searchRequest = null;

$(function () {
    var minlength = 3;

    $("#sample_search").keyup(function () {
        var that = this,
        value = $(this).val();

        if (value.length >= minlength ) {
            if (searchRequest != null) 
                searchRequest.abort();
            searchRequest = $.ajax({
                type: "GET",
                url: "sample.php",
                data: {
                    'search_keyword' : value
                },
                dataType: "text",
                success: function(msg){
                    //we need to check if the value is the same
                    if (value==$(that).val()) {
                    //Receiving the result of search here
                    }
                }
            });
        }
    });
});

EDIT:

Была добавлена ​​переменная searchRequest для предотвращения нескольких ненужных запросов к серверу.

23 голосов
/ 12 апреля 2011

Удерживайте объект XMLHttpRequest, который возвращает $.ajax(), а затем при следующем вызове вызовите .abort (). Это должно убить предыдущий запрос ajax и позволить вам выполнить новый.

var req = null;

function search_func(value)
{
    if (req != null) req.abort();

    req = $.ajax({
        type: "GET",
        url: "sample.php",
        data: {'search_keyword' : value},
        dataType: "text",
        success: function(msg){
                    //Receiving the result of search here
        }
    });
}
4 голосов
/ 12 апреля 2011

Попробуйте использовать автозаполнение jQuery UI .Спасает вас от многих низкоуровневых кодов.

0 голосов
/ 12 апреля 2011

Пара указателей. Во-первых, язык является устаревшим атрибутом javascript. В HTML (5) вы можете оставить атрибут выключенным или использовать type = "text / javascript". Во-вторых, вы используете jQuery, так почему у вас есть вызов встроенной функции, если вы можете сделать это и с jQuery?

$(function(){

   // Document is ready

   $("#sample_search").keyup(function()
   {

       $.ajax({
          type: "GET",
          url: "sample.php",
          data: {'search_keyword' : value},
          dataType: "text",
          success: function(msg)
          {
               //Receiving the result of search here
          }
       });

   });

});

Я бы предложил оставить небольшую задержку между событием keyup и вызовом функции ajax. Что вы можете сделать, это использовать setTimeout, чтобы убедиться, что пользователь закончил печатать до того, как вызывать вашу функцию ajax.

0 голосов
/ 12 апреля 2011

Сначала я предположу, что делать ajax-вызов для каждого keyup не очень хорошо (и поэтому вы запускаете эту проблему).

Во-вторых, если вы хотите использовать keyup, затем показать загрузочное изображение после поля ввода, чтобы показать пользователю, что он все еще загружается (используйте загрузочное изображение, как вы добавляете комментарий)

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...