Копирование данных из массива JSON в объект JS для автозаполнения jQuery

Я пытаюсь использовать плагин автозаполнения в jQuery, чтобы пользователь мог быстро искать имя человека с помощью текстового поля и возвращать свой идентификатор пользователя Facebook. JSON, который предоставляет Facebook, выглядит следующим образом:

{
   "data":[
      {
         "name":"Emma Alexander",
         "id":"8110855"
      },
      {
         "name":"Dave Suckow",
         "id":"19546358"
      },
      {
         "name":"Jessica Willits",
         "id":"45734687"
      }
   ]
}

Однако я хотел бы выполнять поиск локально, а не каждый раз получать JSON Facebook, поэтому я думаю, что мне нужно скопировать все имена и идентификаторы в локальный объект JavaScript (я думаю, что это лучший способ сделать это?) а затем используйте jQuery для поиска по этим именам. Когда пользователь выбирает имя из текстового поля, он вызывает другую функцию и передает ей идентификатор Facebook выбранного человека.

Тем не менее, я не уверен, что это лучший способ, или как я действительно буду его реализовывать.

Если бы кто-нибудь мог предложить пару небольших примеров кода, особенно для копирования данных из JSON Facebook в локальный объект Javascript и последующего поиска в этом объекте, это было бы очень признательно! :)

Большое спасибо


person Jack W    schedule 08.04.2011    source источник


Ответы (3)


Хм.. Вы могли бы сделать что-то вроде этого...

var jsonval=
({
   "data":[
      {
         "name":"Emma Alexander",
         "id":"8110855"
      },
      {
         "name":"Dave Suckow",
         "id":"19546358"
      },
      {
         "name":"Jessica Willits",
         "id":"45734687"
      }
   ]
})


var name=new Array();
var id=new Array();
for(var i=0;i<jsonval.data.length;i++){
name.push(jsonval.data[i].name);
id.push(jsonval.data[i].id);

}

Массивы name и id будут содержать все имена и идентификаторы, полученные из JSON, и искать все значения в новых созданных массивах... Это один из способов... другой: вы можете сохранить JSON, возвращенный в переменной jsonval, а затем каждый раз, когда выполняется поиск с использованием цикла for, который использовался для ввода значений в массив...

person Sangeet Menon    schedule 08.04.2011

Я думаю, вам лучше просто каждый раз вызывать fb json, потому что между поиском что-то может измениться. это сказало, что если вы сделали свой вызов ajsx при загрузке, вы могли бы просто установить var в начале, как это

  searchdata = "";

затем, как только ваш вызов ajax будет сделан, и вы получите свои данные json, просто установите переменную в dataresult bobs вашего дяди

searchdat = jsonresult;

смысл?

person mcgrailm    schedule 08.04.2011

Не тестировалось, но следующая функция принимает строку поиска и объект данных, выполняет поиск в поле имени и возвращает пользовательское значение id или ноль, если совпадение не найдено.

function searchUser(search, data) {
    var matchedUser = null;
    $.each(data, function () {
        if (this.name.indexOf(search) !== -1) {
            matchedUser = this;
        }
    });
    return matchedUser && matchedUser.id;
}
person Shrikant Sharat    schedule 08.04.2011