Страница 1 из 2

IFrame. Переменные (getVariable и putVariable)

Добавлено: 02 окт 2010, 18:40
Александр
IFrame. Переменные (getVariable и putVariable)
JavaScript, IFrame, ВКонтакте API, HTML

Приложение выводит значение переменной при его открытии и записывает значение в переменную, при нажатии на кнопку.

Урок для новичков в создании Iframe-приложений ВКонтакте. На примере этого приложения можно узнать как вызывать методы api, как обрабатывать полученный результат, как выполнять действие при нажатие на кнопку и как решить проблему с кодировкой.


Для работы приложения нужен хостинг.


putVariable
Помещает в переменную, номер которой задан в параметре key (0-4095), значение, переданное в параметре value (строка в utf-8, не более 255 байтов).
Обязательные параметры:
key - Ключ от 0 до 4095, идентификатор переменной.
value - Значение, которое нужно записать в переменную. Строка в utf-8, не более 255 байтов

getVariable
Возвращает значение переменной, номер которой задан в параметре key (0-4095).
Обязательные параметры:
key - Ключ от 0 до 4095, идентификатор переменной.


1. Создаём html файл.
Можно использовать специальную программу или любой текстовый редактор, например, блокнот.
Расширение файла должно быть html.

2. Пишем в созданый html файл код:

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

<html><head><!-- подключаем xd_connection.js --><script src="http://vkontakte.ru/js/api/xd_connection.js?2" type="text/javascript"></script><script type="text/javascript">window.onload = (function() {   // когда загрузится вся страница    VK.init(function() {    // инициализируем Vk API    // получаем значение из переменной 1040    VK.api("getVariable", {key:1040}, function(data) {         // обрабатываем полученный ответ        // выводим в textarea с id="my_text"        document.getElementById('my_text').innerHTML = data.response;    });     });}); // функция записи в переменнуюfunction put(){    // получаем текст из textarea с id="my_text"    var my_text = document.getElementById('my_text').value;    my_text = my_text;    // записываем значение my_text в ячейку 1040    VK.api("putVariable", {key:1040,value:my_text}, function(data) {         // обрабатываем полученный ответ        // если нет ошибки, то данные записаны        if (!data.error) {            document.getElementById('status_info').innerHTML = 'Данные записаны';        } else { // иначе ошибка. Выводим её.            document.getElementById('status_info').innerHTML = data.error.error_msg;        }    });}    </script></head><body><!-- поле для текста --><textarea id="my_text" rows="10" cols="45" >http://flapps.ru</textarea><br /><!-- кнопка для записи --><input type="button" value="Записать" onClick="put()"><!-- блок для вывода статуса записи: сохранено/не сохранено --><div id="status_info"></div></body></html>
Если при выполнении putVariable произойдёт ошибка, то будет возвращено примерно такое:

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

{"error":{    "error_code":110,    "error_msg":"Invalid key",    "request_params":[...]}}
Кодом data.error, мы проверяем существование такого содержания. Символ восклицательного знака "!" - означает отрицание: if (НЕ data.error)

При успешном присваивании переменной сервер вернет:

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

{"response":{}}
В этом ответе нет error.

3. Загружаем файл на свой сервер.

4. Настраиваем приложение на сайте вконтакте.
Выбираем:
Состояние: Приложение включено и видно всем
Тип приложения: IFrame
Адрес IFrame: Ссылка на созданный html файл на вашем сервере. Например http://flapps.ru/vk.html

5. Всё готово. Проверяем.
Помните, что переданное значение - строка в utf-8, не более 255 байтов. Большой текст будет обрезан.
Попробуйте сохранить текст с русскими буквами и обновите страницу. Если вместо нормального текста появляются крякозябли, то можно использовать функции escape() и unescape(). Мне они помогли.
Код такой:

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

<html><head><!-- подключаем xd_connection.js --><script src="http://vkontakte.ru/js/api/xd_connection.js?2" type="text/javascript"></script><script type="text/javascript">window.onload = (function() {   // когда загрузится вся страница    VK.init(function() {    // инициализируем Vk API    // получаем значение из переменной 1040    VK.api("getVariable", {key:1040}, function(data) {         // обрабатываем полученный ответ        // выводим в textarea с id="my_text"        document.getElementById('my_text').innerHTML = unescape(data.response);    });     });}); // функция записи в переменнуюfunction put(){    // получаем текст из textarea с id="my_text"    var my_text = document.getElementById('my_text').value;    my_text = escape(my_text);    // записываем значение my_text в ячейку 1040    VK.api("putVariable", {key:1040,value:my_text}, function(data) {         // обрабатываем полученный ответ        // если нет ошибки, то данные записаны        if (!data.error) {            document.getElementById('status_info').innerHTML = 'Данные записаны';        } else { // иначе ошибка. Выводим её.            document.getElementById('status_info').innerHTML = data.error.error_msg;        }    });}    </script></head><body><!-- поле для текста --><textarea id="my_text" rows="10" cols="45" >http://flapps.ru</textarea><br /><!-- кнопка для записи --><input type="button" value="Записать" onClick="put()"><!-- блок для вывода статуса записи: сохранено/не сохранено --><div id="status_info"></div></body></html>
Функции escape() и unescape() используются в строках 12 и 22.

Исходник http://flapps.ru/example/iframe_variables.rar

Re: IFrame. Переменные (getVariable и putVariable)

Добавлено: 02 окт 2010, 18:46
paduchin
Спасибо за урок :D

Re: IFrame. Переменные (getVariable и putVariable)

Добавлено: 19 окт 2010, 18:16
Paradox
Помогите пожалуйста. Как сделать так, чтобы с помощью getVariable я доставал переменную и тут же сравнивал её с единицой :?:

Re: IFrame. Переменные (getVariable и putVariable)

Добавлено: 20 окт 2010, 22:28
Александр
Paradox

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

    VK.api("getVariable", {key:1040}, function(data) {         if(data.response==1) {           alert('Единица!');        }    });
Без знаний у тебя вряд ли что-то будет получаться...

Re: IFrame. Переменные (getVariable и putVariable)

Добавлено: 21 окт 2010, 12:48
azzzi
В контакте как всегда никакой документации толковой...

Кто может ответить на вопросы?
1. можно ли сделать каждому ИД свое значение переменной 1040?
2. если можно нет ограничений на количество? за сутки то приложение может десятки тысяч таких переменных сделать
3. какой срок хранятся эти переменные на сервере?

Re: IFrame. Переменные (getVariable и putVariable)

Добавлено: 21 окт 2010, 23:29
Александр
azzzi
1. Какие-то переменные доступны только пользователю и у каждого они свои. Какие номера - не знаю, где-то вконтакте было написано.
2. Есть общее ограничение всех переменных. 0-4095. не более 255 символов в каждой.
3. Какие-то неограничено, а какие-то вроде бы несколько часов (переменные сессии).

Re: IFrame. Переменные (getVariable и putVariable)

Добавлено: 22 окт 2010, 14:05
azzzi
4095 переменных...

получается если их использовать чтобы записывать ОЧКИ игроков в приложении, то за пару дней все переменные будут заняты.

значит толку от переменных в этом случае нет, я правильно понял?

Re: IFrame. Переменные (getVariable и putVariable)

Добавлено: 22 окт 2010, 19:56
Александр
azzzi
Да, для хранения большого количества информации, переменные не подойдут.

Re: IFrame. Переменные (getVariable и putVariable)

Добавлено: 04 ноя 2011, 17:54
kurenchuksergey
а можно все не в textarea закинуть а в php&

Re: IFrame. Переменные (getVariable и putVariable)

Добавлено: 04 ноя 2011, 18:02
Александр
kurenchuksergey
не понял тебя...
Методы getVariable и putVariable - считаются устаревшими. Вместо них появились методы storage.get и storage.set.