передача удаленных данных для автозаполнения - PullRequest
0 голосов
/ 16 декабря 2011
 $(document).ready(function () {
          $("#example").autocomplete("https://graph.facebook.com/me/friends?access_token=" + accessToken + "&callback=?", {

               width: 250,
               height: 400,
               max: 8,
               dataType: 'jsonp',
              cacheLength: 10,
               minChars: 1,
               parse: function (data) {
                   var rows = new Array();
                   data = data.data;
                   for (var i = 0; i < data.length; i++) {
                       rows[i] = { data: data[i], value: data[i].name, result: data[i].name };
                   }
                   return rows;
               },
               formatItem: function (data, i, n, value, text, a, b, c, d) {
                   var x = getImage(data.id);
                   return "<div class='test2'><img class='test' width='32px' height='32px' src='" + x + "'></img><span>" + data.name + "</span></div>";
               },

          }
             ).result(function (evnet, item) {
                 alert(item.id);       
            });
     });

     <input type="text" id="example"/>

Я использую этот код для автоматического поиска друзей в Facebook. Он работает, но работает слишком медленно, потому что каждый раз функция автозаполнения ищет данные из удаленного местоположения.

Есть ли другой способ передать удаленные данные, сохранив переменную и передав ее в функцию .autocomplete ().

Позже я попытался сохранить удаленные данные в переменную, но не могу передать переменную в автозаполнение.

jQuery (документ) .ready (function () {

var aToken = document.getElementById('aToken').value;
jQuery.getJSON("https://graph.facebook.com/me/friends?access_token="+aToken, function(data) {
    var data = data;
});
    jQuery("#name_inp").autocomplete({
       width: 500,
       height: 200,
   max: 5000,
   source: data,
        dataType: 'jsonp',
        cacheLength: 10,
       minChars: 1,
        parse: function (data) {
            var rows = new Array();
           data = data.data;
            for (var i = 0; i < data.length; i++) {
                rows[i] = { data: data[i], value: data[i].name, result: data[i].name };
           }
             return rows;
         },
        formatItem: function (data, i, n, value, text, a, b, c, d) {
            var x = getImage(data.id);
             return "<div class='test2' onclick='return getId("+data.id+");'><span>" + data.name + "</span></div>";
       },

   }
     )
 });

1 Ответ

0 голосов
/ 16 декабря 2011
  1. Вы можете получить полный список друзей и сохранить его локально. Затем вместо удаленного вызова выполните поиск по локальным данным.
  2. Также установите noCache: false, он будет кешировать запрос и будет сначала искать в кеше
  3. Попробуйте с хорошим сетевым подключением. :)

EDIT:
Попробуй это. Здесь я храню результаты в переменной userList, которую можно использовать в качестве источника автозаполнения.

$(function() {
        userList = null; 
        $.getJSON("https://graph.facebook.com/me/friends", {access_token:access_token,callback:"?"}, function(users) {
                 userList = users;
             });  
    });     

Или вы можете попробовать это

$(function() {
        userList = null; 
        $.getJSON("https://graph.facebook.com/me/friends?access_token=" + accessToken + "&callback=?",function(users) {
                 userList = users;
             });  
    });     

Я никогда не использовал Facebook API, поэтому не уверен, какие параметры передавать.

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