2011-11-29 3 views
0

У меня проблема с автоматическим полным плагином. Вот мой код:jquery plugin Autocomplete - не показывать результатов

var autocomplete = { 
     cache: {}, 
     xhr: {} 
    }; 

    $('#header .search input[type="text"]').autocomplete({ 
     minLength : 2, 
     source: function (request,response) { 
     var q = request.term; 
     if(q in autocomplete.cache) { 
      response(autocomplete.cache[q]); 
      return false; 
     } else { 
      autocomplete.hxr = $.getJSON("/search/autocomplete/nous?ajax=1&q="+q,function(data, status, xhr) { 
      autocomplete.cache[q] = data; 
      //if(autocomplete.xhr === xhr) { 
       response(data); 
      //} 
     }); 
     return true; 
     } 
     } 
    }); 

Когда я пишу что-то на входе («Hello» в данном случае), я могу видеть в средстве разработки веб, что его возвращающей массив JSON. Итак, я получаю правильный ответ, когда запрос будет выполнен.

0: "hello kitty" 
1: "hello dolly and frieda" 
2: "hello ass" 
3: "hello there" 
4: "hello do you make" 

Это делает запросы AJAX, но результаты не проталкивается в раскрывающемся меню, он пуст. Любая помощь приветствуется!

Спасибо!

+0

это опечатка? 'autocomplete.hxr' –

+0

Какова цель возврата true или false внутри функции источника? Это, похоже, не документировано. –

+0

Я действительно пытаюсь отлаживать код другого пользователя, и этого человека больше нет ... Но это нужно для реализации кэширования, чтобы избежать избыточных запросов. – Lelly

ответ

1

Этот ответ основан на комментарии:

Это, как вы могли бы достичь той же цели с использованием отложенных объектов:

var autocomplete = { 
    cache: {} 
}; 

$('#header .search input[type="text"]').autocomplete({ 
    minLength: 2, 
    source: function(request, response) { 
     var q = request.term; 
     if (!autocomplete.cache[q]) { 
      autocomplete.cache[q] = $.getJSON("/search/autocomplete/nous?ajax=1&q=" + q); 
     } 
     autocomplete.cache[q].done(response).fail(function(x,y,z){ 
      alert(x.responseText + "\n-----\n" + y + "\n" + z); 
     });  
    } 
}); 

Edit: выглядит как причина исходный код не будет работать был вызван опечаткой.

Edit2: добавлен отказоустойчивый обработчик

+0

Хорошо. кажется, что опечатка не устранила проблему, im получая те же результаты; пустой выпадающий список. Я также пробовал ваш код, тот же результат. Любые другие мысли? – Lelly

+0

Попробуйте мой код с модификацией, происходит ли предупреждение? –

+0

Хмм ... Имейте в виду, что для моего кода требуется более новая версия jquery, она не будет работать в jQuery 1.4.4 и старше. –

Смежные вопросы