Форум программистов, компьютерный форум, киберфорум
JavaScript
Войти
Регистрация
Восстановить пароль
Блоги Сообщество Поиск Заказать работу  
 
Рейтинг 4.78/9: Рейтинг темы: голосов - 9, средняя оценка - 4.78
 Аватар для Noit
26 / 26 / 10
Регистрация: 11.04.2012
Сообщений: 870

Глобальная переменная

07.01.2015, 16:10. Показов 2008. Ответов 13
Метки нет (Все метки)

Студворк — интернет-сервис помощи студентам
Есть ajax запрос, который получает ассоциативный массив,
данный массив нужно использовать в другом месте(иной файл), где данная перменная не действительна и соответсвено - is not defined
Как в месте, где не видна та переменная, ее можно использовать?
0
Лучшие ответы (1)
IT_Exp
Эксперт
34794 / 4073 / 2104
Регистрация: 17.06.2006
Сообщений: 32,602
Блог
07.01.2015, 16:10
Ответы с готовыми решениями:

Глобальная переменная
Имеется функция в которую при событии онклик попадает переменная news_id function news_plus(news_id) { ...

Глобальная переменная
Здравствуйте! Прошу помочь: При запуске нижеприведенного кода изменения глобальной переменной а в функции fst() не "видны"...

Глобальная переменная
Мне необходимо, при нажатии на кнопку, менять значение глобальной, ранее объявленной переменной( значение s=100; при нажатии на кнопку, s...

13
супермизантроп
Эксперт JS
3941 / 2979 / 692
Регистрация: 18.04.2012
Сообщений: 8,629
07.01.2015, 16:25
массив (индексный или ассоциативный) - это виртуальность конкретной программы
передать массив из одной программы в другую вы в принципе не можете
по технологии AJAX серверный файл может передать странице только текстовую строку символов, (то самое свойство responseText)
преобразование массива в строку для передачи обычно производится через JSON-форматирование с последующим деформатированием на странице
0
 Аватар для Noit
26 / 26 / 10
Регистрация: 11.04.2012
Сообщений: 870
07.01.2015, 16:26  [ТС]
Да, я обрабатывал ответ с помощью JSON.parse, но вопрос немного не в этом
0
супермизантроп
Эксперт JS
3941 / 2979 / 692
Регистрация: 18.04.2012
Сообщений: 8,629
07.01.2015, 16:29
Цитата Сообщение от Noit Посмотреть сообщение
вопрос немного не в этом
в этом, в этом... просто понять не желаете
400 человек - это только в армии - батальон, в других сферах человеческой жизни - это просто толпа народа
взять и как-то глобально объявить, что 400 человек - это везде и всегда батальон -- нельзя
0
 Аватар для Noit
26 / 26 / 10
Регистрация: 11.04.2012
Сообщений: 870
07.01.2015, 16:41  [ТС]
вот обработка ответа:
JavaScript
1
2
3
success : function ( data ) {
            var table_data = JSON.parse ( data );
        }
что здесь не так?
0
супермизантроп
Эксперт JS
3941 / 2979 / 692
Регистрация: 18.04.2012
Сообщений: 8,629
07.01.2015, 16:54
Цитата Сообщение от Noit Посмотреть сообщение
что здесь не так?
не знаю
в javascript'e мне неизвестна конструкция success

если вы предпочитаете общаться на собачьем языке JQuery, то вам и следует обращаться в соответствующий питомник -- https://www.cyberforum.ru/javascript-jquery/, а здесь люди общаются на нормальном человеческом языке pure Javascript
0
z-z
170 / 169 / 56
Регистрация: 22.06.2011
Сообщений: 980
07.01.2015, 21:51
Noit, не очень понял, в чем суть. Ajax-запрос скорее всего совершается тогда, когда страница уже давно загружена, а значит если и использовать полученный ответ в другом файле, то например через функцию. То есть в другом файле есть какая нибудь функция, которая вызывается внутри callback вашего запроса с передачей данного параметра.
0
 Аватар для Noit
26 / 26 / 10
Регистрация: 11.04.2012
Сообщений: 870
08.01.2015, 18:05  [ТС]
Использую следующий js код:
JavaScript
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
var table_data = table_array();
alert(table_data[0].login);//TypeError: table_data is undefined
function table_array() {
    var xhr = new XMLHttpRequest(); 
    xhr.open("POST", '//lottmarket.com/wp-content/themes/lottmarket/API_sample.php', true);
    xhr.setRequestHeader('Content-Type', 'application/x-www-form-urlencoded');
    xhr.send('typeRequest=get_table_data');
    xhr.onreadystatechange = function() {
           if (xhr.readyState == 4) {
               if(xhr.status == 200) {
               return JSON.parse ( xhr.responseText );
               }
           }
        };
}
0
z-z
170 / 169 / 56
Регистрация: 22.06.2011
Сообщений: 980
08.01.2015, 19:19
Лучший ответ Сообщение было отмечено Noit как решение

Решение

Noit, так вот и проблема. Представляете, как работает ajax запрос? Отправляется запрос на сервер, сервер думает, отправляет ответ на этот запрос. Эта операция асинхронная. Поэтому и не работает. Другими словами:

JavaScript
1
2
3
var table_data = table_array(); // тут вы вызвали функцию, которая отправила запрос на сервер
// какое либо значение в этой переменной появится только тогда, когда сервер вернет какой то ответ
alert(table_data[0].login); // поэтому тут и возвращается table_data is undefined
Как с этим бороться - не скажу, ибо не представляю, что и как там у вас работает. Но одно из решений - продолжать работу внутри xhr.onreadystatechange
0
 Аватар для Noit
26 / 26 / 10
Регистрация: 11.04.2012
Сообщений: 870
08.01.2015, 21:24  [ТС]
Цитата Сообщение от z-z Посмотреть сообщение
Но одно из решений - продолжать работу внутри xhr.onreadystatechange
а это не играет роли?:
Цитата Сообщение от Noit Посмотреть сообщение
return JSON.parse ( xhr.responseText );
я же возвращаю в функции ответ.
0
z-z
170 / 169 / 56
Регистрация: 22.06.2011
Сообщений: 980
08.01.2015, 21:58
JavaScript
1
2
var table_data = table_array();
alert(table_data[0].login);
тут вы сначала объявляете переменную, а потом сразу же ее используете, но проблема в том, что переменная будет содержать в себе какое то значение только после того, как придет ответ с сервера. Поэтому там и получается ошибка.

Добавлено через 2 минуты
уж простите, не умею объяснять =) при объявлении переменной вы вызываете функцию, результат эта функция может вернуть даже секунды через две, если соединение будет плохое или еще чего. То есть эти две секунды переменная не будет содержать в себе ничего. А вы пытаетесь использовать ее сразу же после объявления.
0
 Аватар для Noit
26 / 26 / 10
Регистрация: 11.04.2012
Сообщений: 870
08.01.2015, 22:03  [ТС]
Цитата Сообщение от z-z Посмотреть сообщение
тут вы сначала объявляете переменную
Я вас понял,а можно ли продолжить окончание функции только при завершении пост запроса, т.е. при получении ответа от сервера,что бы функция возвращала ответ, так сказать дождаться пока окончится, а потом вернуть результат?
Или только выход тот, что вы описывали в в предыдущем сообщении?
0
z-z
170 / 169 / 56
Регистрация: 22.06.2011
Сообщений: 980
08.01.2015, 22:17
При завершении пост запроса автоматически запускается событие onreadystatechange вашего объекта xhr. Поэтому только там и можно далее использовать эти данные. Либо можно внутри этого обработчика события вызвать другую функцию и там уже продолжить творить чудеса.

JavaScript
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
function table_array() {
    var xhr = new XMLHttpRequest(); 
    xhr.open("POST", '//lottmarket.com/wp-content/themes/lottmarket/API_sample.php', true);
    xhr.setRequestHeader('Content-Type', 'application/x-www-form-urlencoded');
    xhr.send('typeRequest=get_table_data');
    xhr.onreadystatechange = function() {
           if (xhr.readyState == 4) {
               if(xhr.status == 200) {
                   var myData = JSON.parse ( xhr.responseText ); // вот мы получили желанный ответ
                   // дальше с ним можно делать что угодно
                   // например вызовем какую то левую функцию, где будем это использовать
               }
           }
        };
}


Либо же можно попробовать отключить асинхронность запроса. Для этого в строке

JavaScript
1
xhr.open("POST", '//lottmarket.com/wp-content/themes/lottmarket/API_sample.php', true);
вместо true поставить false. Это будет означать, что пока не закончится запрос, ничего происходить не будет. Однако же я не знаю, сработает это или нет =)
1
 Аватар для Noit
26 / 26 / 10
Регистрация: 11.04.2012
Сообщений: 870
08.01.2015, 22:25  [ТС]
Цитата Сообщение от z-z Посмотреть сообщение
вместо true поставить false. Это будет означать, что пока не закончится запрос, ничего происходить не будет. Однако же я не знаю, сработает это или нет =)
К сожалению не сработало, видимо буду в функции onreadystatechange выполнять, спасибо за разъяснения)
0
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
BasicMan
Эксперт
29316 / 5623 / 2384
Регистрация: 17.02.2009
Сообщений: 30,364
Блог
08.01.2015, 22:25
Помогаю со студенческими работами здесь

Глобальная переменная не работает
сделал такой код <html><head> <script type="text/javascript"> var rs=1; function r1(){var rs=rs-1; if(rs<1){var rs=3;}} ...

Глобальная переменная в функции
Вот пример кода из книги var scope = "global"; function f(){ console.log(scope); //Выведет "undefined", а не "global" ...

Глобальная переменная - значит везде в окне!
Доброго времени суток. Возникла бооооольшая непонятка.: window.onload = function() { var profitem; ...

И снова глобальная переменная в js. Как изменить значение глобальной переменной в одной функции и увидеть это значение в другой функции?
Это учебное задание. Помогите, пожалуйста, разобраться почему func1 видит какую-то новую переменную t вместо window.t? Пробовала...

глобальная область видимости
привет всем. прочитал что переменные обьявляются ключом Var для того, чтобы определить её область видимости. так вот назрел следующий...


Искать еще темы с ответами

Или воспользуйтесь поиском по форуму:
14
Ответ Создать тему
Новые блоги и статьи
Вывод данных через динамический список в справочнике
Maks 01.04.2026
Реализация из решения ниже выполнена на примере нетипового справочника "Спецтехника" разработанного в конфигурации КА2. Задача: вывести данные из ТЧ нетипового документа. . .
Функция заполнения текстового поля в реквизите формы документа
Maks 01.04.2026
Алгоритм из решения ниже реализован на нетиповом документе "ВыдачаОборудованияНаСпецтехнику" разработанного в конфигурации КА2, в дополнении к предыдущему решению. На форме документа создается. . .
К слову об оптимизации
kumehtar 01.04.2026
Вспоминаю начало 2000-х, университет, когда я писал на Delphi. Тогда среди программистов на форумах активно обсуждали аккуратную работу с памятью: нужно было следить за переменными, вовремя. . .
Идея фильтра интернета (сервер = слой+фильтр).
Hrethgir 31.03.2026
Суть идеи заключается в том, чтобы запустить свой сервер, о чём я если честно мечтал давно и давно приобрёл книгу как это сделать. Но не было причин его запускать. Очумелые учёные напечатали на. . .
Модель здравосоХранения 6. ESG-повестка и устойчивое развитие; углублённый анализ кадрового бренда
anaschu 31.03.2026
В прикрепленном документе раздумья о том, как можно поменять модель в будущем
10 пpимет, которые всегда сбываются
Maks 31.03.2026
1. Чтобы, наконец, пришла маршрутка, надо закурить. Если сигарета последняя, маршрутка придет еще до второй затяжки даже вопреки расписанию. 2. Нaдоели зима и снег? Не надо переезжать. Достаточно. . .
Перемещение выделенных строк ТЧ из одного документа в другой
Maks 31.03.2026
Реализация из решения ниже выполнена на примере нетипового документа "ВыдачаОборудованияНаСпецтехнику" с единственной табличной частью "ОборудованиеИКомплектующие" разработанного в конфигурации КА2. . . .
Functional First Web Framework Suave
DevAlt 30.03.2026
Sauve. IO Апнулись до NET10. Из зависимостей один пакет, работает одинаково хорошо как в режиме проекта так и в интерактивном режиме. из сложностей - чисто функциональный подход. Решил. . .
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2026, CyberForum.ru