Javascript-форум (https://javascript.ru/forum/)
-   Общие вопросы Javascript (https://javascript.ru/forum/misc/)
-   -   Видимость глобальной переменной (https://javascript.ru/forum/misc/54432-vidimost-globalnojj-peremennojj.html)

opus44 17.03.2015 13:11

Видимость глобальной переменной
 
Добрый день. Помогите пожалуйста разобраться в проблеме.
Данные в глобальной переменной $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 не сохраняются.

ksa 17.03.2015 13:33

Цитата:

Сообщение от opus44
Данные в глобальной переменной $data не сохраняются.

В твоем варианте она глобальной почти и не бывает... :D Чаще простым параметром функции и не более того.

opus44 17.03.2015 14:09

ksa, подскажите пожалуйста, что я делаю не правильно?..

skrudjmakdak 17.03.2015 14:16

первое что мне бросилось сразу в глаза, так это $data.shift();
ведь $data у тебя не массив, а объект
открой консоль (f12) и посмотри, на том месте у тя ошибка должна вывалиться

opus44 17.03.2015 14:19

skrudjmakdak, в данном случае эта конструкция работает.

skrudjmakdak 17.03.2015 14:20

ты в $data добавил метод shift?

opus44 17.03.2015 14:24

skrudjmakdak,да. строка 33.

ksa 17.03.2015 14:25

Цитата:

Сообщение от 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);
};

skrudjmakdak 17.03.2015 14:26

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

да, время потратишь на изучение. но без нее оч трудно

ksa 17.03.2015 14:26

Цитата:

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

Передаваемый параметр видать массив... ;)


Часовой пояс GMT +3, время: 08:12.