Модераторы: Sardar, Aliance
  

Поиск:

Ответ в темуСоздание новой темы Создание опроса
> Хранение данных в переменной 
V
    Опции темы
Nerfair
Дата 24.7.2012, 22:16 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



Профиль
Группа: Участник
Сообщений: 15
Регистрация: 11.3.2012

Репутация: нет
Всего: нет



Добрый день, получаю от сервера данные вида 

Код

{ "error" : 0, "quotes" : [ { "id" : 1, "text" : "Цитата 1"}, { "id" : 2, "text" : "Цитата 2"}, { "id" : 3, "text" : "Цитата 3"} ] }


Дальше их сохраняю в result 
Код

function getQuotes() {
    var xhr = new XMLHttpRequest();
    xhr.open("GET", "url", true);
    xhr.setRequestHeader('Accept-Encoding', 'gzip');

    xhr.onreadystatechange =
            function() {
                if (xhr.readyState == xhr.DONE) {
                    if (xhr.status == 200) {
                        var result = JSON.parse(xhr.responseText);

                        Производим какие либо действия ...
                }
            }
    xhr.send();
}


И допустим если я хочу вывести пользователю только "Цитата 1" и забыть об этом тто просто вместо "Производим какие либо действия ..." напишу
Код

alert(result["quotes"][0]["text"];


Но я хочу что бы по нажатию кнопки выводилось сначала "Цитата 2" потом "Цитата 3" и так, сколько там этих цитат будет.

Пишу функцию 

Код

function alertNextQuote(id) {
    result["quotes"][id]["text"];
}


Которой мы будем передавать след. значение. Но это функция result наш не знала, не слышала о нем и слышать ничего не хочет. А переписать getQuotes по такому типу и подключаться каждый раз к серверу, помоему не очень хорошо, когда нам в первый раз уже отдали все цитаты/тексты. Вопрос, каким образом при вызове getQuotes сохранить наш ответ в какую нибудь глобальную переменную что бы потом с ней работать из любой другой функции?

Это сообщение отредактировал(а) Aliance - 25.7.2012, 09:50
PM MAIL   Вверх
Aliance
Дата 25.7.2012, 09:55 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


I ♥ <script>
****


Профиль
Группа: Модератор
Сообщений: 6418
Регистрация: 2.8.2004
Где: spb

Репутация: 17
Всего: 137



Конечно, ведь переменная result - локальная, её область видимости ограничивается анонимной функцией.
Решение: объявляем глобальную переменную и ей и присваиваем значение.
Код

// объявляем глобальную переменную
var result;

function getQuotes() {
    // ...
    xhr.onreadystatechange = function() {
                if (xhr.readyState == xhr.DONE) {
                    if (xhr.status == 200) {
                        // присваиваем данные глобальной переменной
                        result = JSON.parse(xhr.responseText);
                        // Производим какие либо действия ...
                }
            }
    // ...
}



Кстати, alertNextQuote не возвращает никаких данных. Наверное нужно сделать так:
Код

function alertNextQuote(id) {
    return (typeof result["quotes"][id] != 'undefined') ? result["quotes"][id]["text"] : '---';
}


Это сообщение отредактировал(а) Aliance - 25.7.2012, 09:56
PM MAIL WWW ICQ Skype   Вверх
Nerfair
Дата 25.7.2012, 13:49 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



Профиль
Группа: Участник
Сообщений: 15
Регистрация: 11.3.2012

Репутация: нет
Всего: нет



Спасибо, Aliance  smile 
PM MAIL   Вверх
  
Ответ в темуСоздание новой темы Создание опроса
0 Пользователей читают эту тему (0 Гостей и 0 Скрытых Пользователей)
0 Пользователей:
« Предыдущая тема | JavaScript: для новичков | Следующая тема »


 




[ Время генерации скрипта: 0.0403 ]   [ Использовано запросов: 22 ]   [ GZIP включён ]


Реклама на сайте     Информационное спонсорство

 
По вопросам размещения рекламы пишите на vladimir(sobaka)vingrad.ru
Отказ от ответственности     Powered by Invision Power Board(R) 1.3 © 2003  IPS, Inc.