Javascript.RU

Создать новую тему Ответ
 
Опции темы Искать в теме
  #1 (permalink)  
Старый 17.03.2015, 13:11
Интересующийся
Отправить личное сообщение для opus44 Посмотреть профиль Найти все сообщения от opus44
 
Регистрация: 06.11.2014
Сообщений: 16

Видимость глобальной переменной
Добрый день. Помогите пожалуйста разобраться в проблеме.
Данные в глобальной переменной $data не сохраняются.
var $data = {};
var $IntervalID ='';
var $start = $('#start');
var $pause = $('#pause');

$start.on('click', function(){
//Отбираем данные и заносим их в переменную $data
// Если объект $data пустой - заполняем его
if ($.isEmptyObject($data)){
      var $numL = $('#selectL :selected').val();       
      $.ajax({
               type: 'POST',
               url: '/ajax/getData/',        	   
               dataType: 'json',
               data: {'numL': $numL},
               success: function($data){ 
                    someFunc($data);                	   	
	           },
 	           error: function(){
    		          alert("Ошибка!");
    	        }
           });        
        } else {  //в противном случае продолжаем выполнение someFunc          
            someFunc($data);
        }
});
$pause.on('click', function(){       
    clearInterval($IntervalID);
    $IntervalID = null;
}); 
function someFunc($data){
        $IntervalID = setInterval(function(){
            var $tmp = $data.shift();    
                $en_word.text($tmp.name);
        }, 1500);

};

, по нажатию на кнопку $start получаем данные и запускается функция someFunc.
Кнопка $pause приостанавливает выполнение someFunc, а при повторном нажатии кнопки $start цикл должен продолжиться с момента остановки. На практике получается что переменная $data "обнуляется" и AJAX опять отбирает данные и все начинается с начала.

Т.е. проблема в том, что данные в переменной $data не сохраняются.
Ответить с цитированием
  #2 (permalink)  
Старый 17.03.2015, 13:33
Аватар для ksa
ksa ksa вне форума
CacheVar
Отправить личное сообщение для ksa Посмотреть профиль Найти все сообщения от ksa
 
Регистрация: 19.08.2010
Сообщений: 14,202

Сообщение от opus44
Данные в глобальной переменной $data не сохраняются.
В твоем варианте она глобальной почти и не бывает... Чаще простым параметром функции и не более того.
Ответить с цитированием
  #3 (permalink)  
Старый 17.03.2015, 14:09
Интересующийся
Отправить личное сообщение для opus44 Посмотреть профиль Найти все сообщения от opus44
 
Регистрация: 06.11.2014
Сообщений: 16

ksa, подскажите пожалуйста, что я делаю не правильно?..
Ответить с цитированием
  #4 (permalink)  
Старый 17.03.2015, 14:16
Профессор
Отправить личное сообщение для skrudjmakdak Посмотреть профиль Найти все сообщения от skrudjmakdak
 
Регистрация: 27.04.2012
Сообщений: 1,410

первое что мне бросилось сразу в глаза, так это $data.shift();
ведь $data у тебя не массив, а объект
открой консоль (f12) и посмотри, на том месте у тя ошибка должна вывалиться
Ответить с цитированием
  #5 (permalink)  
Старый 17.03.2015, 14:19
Интересующийся
Отправить личное сообщение для opus44 Посмотреть профиль Найти все сообщения от opus44
 
Регистрация: 06.11.2014
Сообщений: 16

skrudjmakdak, в данном случае эта конструкция работает.
Ответить с цитированием
  #6 (permalink)  
Старый 17.03.2015, 14:20
Профессор
Отправить личное сообщение для skrudjmakdak Посмотреть профиль Найти все сообщения от skrudjmakdak
 
Регистрация: 27.04.2012
Сообщений: 1,410

ты в $data добавил метод shift?
Ответить с цитированием
  #7 (permalink)  
Старый 17.03.2015, 14:24
Интересующийся
Отправить личное сообщение для opus44 Посмотреть профиль Найти все сообщения от opus44
 
Регистрация: 06.11.2014
Сообщений: 16

skrudjmakdak,да. строка 33.
Ответить с цитированием
  #8 (permalink)  
Старый 17.03.2015, 14:25
Аватар для ksa
ksa ksa вне форума
CacheVar
Отправить личное сообщение для ksa Посмотреть профиль Найти все сообщения от ksa
 
Регистрация: 19.08.2010
Сообщений: 14,202

Сообщение от opus44
что я делаю не правильно?
Сначала вроде как
Сообщение от opus44
var $data = {};
Но потом
Сообщение от opus44
success: function($data){/**/}
и
Сообщение от opus44
function someFunc($data){/**/}
что полностью убило былую "глобальность" этой переменной

Пример

var a=1;
test(5);
alert('global '+a)
function test(a){
   alert('test '+a);
};
Ответить с цитированием
  #9 (permalink)  
Старый 17.03.2015, 14:26
Профессор
Отправить личное сообщение для skrudjmakdak Посмотреть профиль Найти все сообщения от skrudjmakdak
 
Регистрация: 27.04.2012
Сообщений: 1,410

на 33 строке ты вызываешь метод shift. а я тебя спросил про добавление
лучше, вот, почитай про отладку:
http://learn.javascript.ru/debugging-chrome

да, время потратишь на изучение. но без нее оч трудно
Ответить с цитированием
  #10 (permalink)  
Старый 17.03.2015, 14:26
Аватар для ksa
ksa ksa вне форума
CacheVar
Отправить личное сообщение для ksa Посмотреть профиль Найти все сообщения от ksa
 
Регистрация: 19.08.2010
Сообщений: 14,202

Сообщение от skrudjmakdak
первое что мне бросилось сразу в глаза, так это $data.shift();
ведь $data у тебя не массив, а объект
Передаваемый параметр видать массив...
Ответить с цитированием
Ответ



Опции темы Искать в теме
Искать в теме:

Расширенный поиск


Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
Разница между переменной с var и без, которые в глобальной области zhurchik Общие вопросы Javascript 20 15.03.2015 05:30
Видимость переменной при асинхронном запросе. Как передать и получить значение? Stroganov Ilya Общие вопросы Javascript 10 17.10.2014 17:33
Видимость переменной про onLoad Jambo85 Events/DOM/Window 10 05.11.2011 21:08
изменение значения глобальной переменной внутри функции mgmarket Серверные языки и технологии 14 13.09.2011 00:56
Обращение к глобальной переменной из jQuery Иван Алексеев jQuery 6 13.08.2010 20:56