Вывод списка друзей пользователя

Обсуждение и помощь по вопросам взаимодействия с ВКонтакте API в IFrame-приложениях (JavaScript, PHP и т.д)
Ответить
Аватара пользователя
BaCo
Сообщения: 76
Зарегистрирован: 28 дек 2010, 11:48

Вывод списка друзей пользователя

Сообщение BaCo »

Написал скрипт для вывода списка друзей в select.

Код: Выделить всё

      addBox = new MessageBox({title: 'Отправка цитаты на стену другу'});      addBox.addButton({label: "Закрыть", style: 'button_no', onClick: addBox.hide});      addBox.addButton({label: "Отправить", onClick:function() { setStatus(text, $('#friendList').val()); addBox.hide; }});      addBox.content('<form><div id="friendListContainer">Выберите друга, которому хотите отправить цитату:<br /><br /><select id="friendList"></select></div></form>');      {prefix}.api('friends.get', {fields: 'uid'}, function(data) {        for(var i = 0; i < data.response.length; i++) {          if(data.response[i].online) {            $('#friendList').prepend($('<option value="' + data.response[i].uid + '">' + data.response[i].first_name + " " + data.response[i].last_name + ' [в сети]</option>'));          } else {            $('#friendList').append($('<option value="' + data.response[i].uid + '">' + data.response[i].first_name + " " + data.response[i].last_name + '</option>'));          }        }      });      addBox.show();
Есть 2 вопроса:
1) Код можно вызвать только один раз, не перезагружая страницу (если больше одного, то список просто не заполняется). Подозреваю, что проблема кроется в friends.get. Подскажите как исправить?
2) Можно ли вместо обычного select использовать dropdown из VK GUI? Если да, можете подсказать?
VK GUI: http://vkj.net.ru/gui.php
Аватара пользователя
BaCo
Сообщения: 76
Зарегистрирован: 28 дек 2010, 11:48

Re: Вывод списка друзей пользователя

Сообщение BaCo »

Может все-таки есть варианты?
Аватара пользователя
Александр
Создатель сайта
Создатель сайта
Сообщения: 4574
Зарегистрирован: 27 сен 2009, 16:45

Re: Вывод списка друзей пользователя

Сообщение Александр »

BaCo писал(а):Код можно вызвать только один раз, не перезагружая страницу (если больше одного, то список просто не заполняется). Подозреваю, что проблема кроется в friends.get. Подскажите как исправить?
Запрос к серверу api уходит? Ответ возвращает? Посмотри с помощью Charles.
Аватара пользователя
BaCo
Сообщения: 76
Зарегистрирован: 28 дек 2010, 11:48

Re: Вывод списка друзей пользователя

Сообщение BaCo »

Подсказали решение. Может кому пригодится:

Код: Выделить всё

      addBox = new MessageBox({title: 'Отправка цитаты на стену другу'});      addBox.addButton({label: "Закрыть", style: 'button_no', onClick: addBox.hide});      addBox.addButton({label: "Отправить", onClick:function() {setStatus(text, $('#friendList').val()); addBox.hide; }});      addBox.content('<center><div id="friendListContainer">Выберите друга, которому хотите отправить цитату:<br /><br /><input id="friendList"></div></center>');      addBox.show();      VK.api('friends.get', {fields: 'uid'}, function(data) {        var html = '[';        var s = data.response.length;        for(var i = 0; i < s; i++){          html += '['+data.response[i].uid+', "'+data.response[i].first_name+' '+data.response[i].last_name+(data.response[i].online?' [в сети]':'')+'"],';        }        html += ']';        new Dropdown(ge('friendList'),eval(html),{width: 200});      });
Аватара пользователя
BaCo
Сообщения: 76
Зарегистрирован: 28 дек 2010, 11:48

Re: Вывод списка друзей пользователя

Сообщение BaCo »

Неудача... Скрипт размещенный выше не работает... Не получает значение Dropdown:

Код: Выделить всё

$('#friendList').val()
Подскажите, как можно получить его значение?
Аватара пользователя
BaCo
Сообщения: 76
Зарегистрирован: 28 дек 2010, 11:48

Re: Вывод списка друзей пользователя

Сообщение BaCo »

Порылся тут http://vkontakte.ru/js/lib/ui_controls.js. Думаю, что надо использовать функцию val_full. Только не знаю как...
Аватара пользователя
BaCo
Сообщения: 76
Зарегистрирован: 28 дек 2010, 11:48

Re: Вывод списка друзей пользователя

Сообщение BaCo »

Полностью рабочий скрипт:

Код: Выделить всё

function sendToFriend(text) {      addBox = new MessageBox({title: 'Отправка цитаты на стену другу'});      addBox.addButton({label: "Закрыть", style: 'button_no', onClick: addBox.hide});      addBox.addButton({label: "Отправить", onClick:function() {setStatus(text, FriendList.val()); addBox.hide; }});      addBox.content('<center><div id="friendListContainer" style="display:none;">Выберите друга, которому хотите отправить цитату:<br /><br /><input id="friendList"></div><img id="progress" style="display:block;" src="http://vkontakte.ru/images/upload.gif" /></center>');      addBox.show();      VK.api('friends.get', {fields: 'uid'}, function(data) {        var html = '[';        var s = data.response.length;        for(var i = 0; i < s; i++){          html += '[' + data.response[i].uid + ', "' + data.response[i].first_name + ' ' + data.response[i].last_name + '", ' + (data.response[i].online?'"Сейчас в сети!"':'')+'],';        }        html += ']';        FriendList = new Dropdown(ge('friendList'),eval(html),{width: 250});      });      $(ge('friendListContainer')).css('display', 'block');      $(ge('progress')).css('display', 'none');    }
Получить значение Dropdown очень просто:

Код: Выделить всё

FriendList.val()
А теперь вопрос: попытался сделать прогресс загрузки. Т.е. когда окно открывается, в скрытом div загружаются списки юзеров, а в другом div стоит картинка, отображающая прогресс. Когда списки загружены, div с юзерами показывается, а с картинкой скрывается. Проблема в том, что при первом открытии окно все работает нормально, списки заполняются и тд, а при втором, третьем и тд - отображается только картинка, хотя я знаю (проверял) список всех юзеров получен и возможно получать значения из него. В чем дело? :?: :?: :?:
Аватара пользователя
BaCo
Сообщения: 76
Зарегистрирован: 28 дек 2010, 11:48

Re: Вывод списка друзей пользователя

Сообщение BaCo »

Правка в предыдущий пост!

Код: Выделить всё

      addBox = new MessageBox({title: 'Отправка цитаты на стену другу'});      addBox.addButton({label: "Закрыть", style: 'button_no', onClick: addBox.hide});      addBox.addButton({label: "Отправить", onClick:function() {alert(FriendList.val()); addBox.hide; }});      addBox.content('<center><div id="friendListContainer">Выберите друга:<br /><br /><input id="friendList"></div></center>');      addBox.show();      VK.api('friends.get', {fields: 'uid'}, function(data) {        var html = '[';        var s = data.response.length;        for(var i = 0; i < s; i++){          html += '[' + data.response[i].uid + ', "' + data.response[i].first_name + ' ' + data.response[i].last_name + '", ' + (data.response[i].online?'"Сейчас в сети!"':'')+'],';        }        html += ']';        FriendList = new Dropdown(ge('friendList'),eval(html),{width: 250});      });
Ответить