Javascript.RU

Создать новую тему Ответ
 
Опции темы Искать в теме
  #1 (permalink)  
Старый 10.04.2011, 23:39
Аспирант
Отправить личное сообщение для zeraid Посмотреть профиль Найти все сообщения от zeraid
 
Регистрация: 27.03.2011
Сообщений: 75

Переменный в setinterval не видно вне него
Вопрос следующий. Вот у меня есть аякс запрос, который выполяется раз в секунду. Функция внутри запроса возвращает какое то значение.

setInterval(function test(){ 
    var t; 
 
$.ajax({
   type: "POST",
   url: "/mnemo_1.php",
   //data: "func=1",
   dataType: "text",
   async: false,
   success: function (data){t = data;},
   error: function(){alert('Problem');}
 }).responseText;

 return t; 

}, 1000);

s1 = test();

/// далее идет функция внутри которой я использую значение из setinterval
draw2d.MyWorkflow.prototype.getContextMenu=function()
{
  var menu =new draw2d.Menu();
  var oThis = this;
    
  menu.appendMenuItem(new draw2d.MenuItem("Насос", null,function(x,y,s1)
  {
     var s1 = new draw2d.Server("any_pkey1",ВОТ СЮДА НАДО РАЗ В СЕК ВСТАВЛЯТЬ ЗНАЧЕНИЕ, "up"); 
	 oThis.addFigure(s1, x, y);
  }));

  return menu;
}


проблема в том, что все объявленный переменные, функции и тп внутри setinterval не видно ВНЕ него. Так как же работать со значениями которые я в нем получаю.

Говорить мне писать код в success мне не надо ибо у меня много функций который будут использовать это значение.
Ответить с цитированием
  #2 (permalink)  
Старый 11.04.2011, 00:39
Аватар для Gvozd
Матрос
Отправить личное сообщение для Gvozd Посмотреть профиль Найти все сообщения от Gvozd
 
Регистрация: 04.04.2008
Сообщений: 6,246

Сообщение от zeraid
Говорить мне писать код в success мне не надо ибо у меня много функций который будут использовать это значение.
Равшан, ты?
По теме:
http://javascript.ru/basic/closure
Ответить с цитированием
  #3 (permalink)  
Старый 11.04.2011, 00:48
Аспирант
Отправить личное сообщение для zeraid Посмотреть профиль Найти все сообщения от zeraid
 
Регистрация: 27.03.2011
Сообщений: 75

Сообщение от Gvozd Посмотреть сообщение
Равшан, ты?
По теме:
http://javascript.ru/basic/closure
спасибо. но с этим материалом я уже ознакамливался. Но приминения ему в моем случае так и не нашел, хотя возился долго.
Ответить с цитированием
  #4 (permalink)  
Старый 11.04.2011, 01:05
Аватар для Gvozd
Матрос
Отправить личное сообщение для Gvozd Посмотреть профиль Найти все сообщения от Gvozd
 
Регистрация: 04.04.2008
Сообщений: 6,246

не совсем та ссылка
вот:
http://javascript.ru/basic/functions#oblasti-vidimosti
Ответить с цитированием
  #5 (permalink)  
Старый 11.04.2011, 11:58
Аспирант
Отправить личное сообщение для zeraid Посмотреть профиль Найти все сообщения от zeraid
 
Регистрация: 27.03.2011
Сообщений: 75

Сообщение от Gvozd Посмотреть сообщение
не совсем та ссылка
вот:
http://javascript.ru/basic/functions#oblasti-vidimosti
опять таки не понел к чему вы дали ссыль. Естественно я все это знаю). setinterval эт вообще я так понел не функция. И я пробывал использовать глобальные переменные - всеравно пишет что не определена.
Ответить с цитированием
  #6 (permalink)  
Старый 11.04.2011, 12:06
Аспирант
Отправить личное сообщение для zeraid Посмотреть профиль Найти все сообщения от zeraid
 
Регистрация: 27.03.2011
Сообщений: 75

Всетаки по прежнему функцию test и переменные внутри setinterval он не видит в дальнейшем.

Последний раз редактировалось zeraid, 11.04.2011 в 13:24.
Ответить с цитированием
  #7 (permalink)  
Старый 11.04.2011, 13:30
Аспирант
Отправить личное сообщение для zeraid Посмотреть профиль Найти все сообщения от zeraid
 
Регистрация: 27.03.2011
Сообщений: 75

setInterval(function test(){ 
    t=0; 
 
$.ajax({
   type: "POST",
   url: "/mnemo_1.php",
   //data: "func=1",
   dataType: "text",
   async: false,
   success: function (data){t = data; },
   error: function(){alert('Problem');}
 }).responseText;

 return t; 

}, 1000);

sss = t;


Вот так он будет ругатся что t не видит. Если вместо t написать test() то тоже напишет что не видит.
Ответить с цитированием
  #8 (permalink)  
Старый 11.04.2011, 14:04
Аватар для Gvozd
Матрос
Отправить личное сообщение для Gvozd Посмотреть профиль Найти все сообщения от Gvozd
 
Регистрация: 04.04.2008
Сообщений: 6,246

вы выполняете строчку sss = t; до того, как будет послан первый запрос.
как только первый запрос будет выполнен, вам будет доступно необходимое вам значение t
Ответить с цитированием
  #9 (permalink)  
Старый 11.04.2011, 15:07
Аспирант
Отправить личное сообщение для zeraid Посмотреть профиль Найти все сообщения от zeraid
 
Регистрация: 27.03.2011
Сообщений: 75

Сообщение от Gvozd Посмотреть сообщение
вы выполняете строчку sss = t; до того, как будет послан первый запрос.
как только первый запрос будет выполнен, вам будет доступно необходимое вам значение t
да. совершенно верно. я это понимаю. Но как реализовать это все дело уже после 1 запроса. Можно как то это задать или перед 1 запросом сделать паузу и тп. Помогите с этим разобраться.
Ответить с цитированием
  #10 (permalink)  
Старый 11.04.2011, 15:48
Аватар для Gvozd
Матрос
Отправить личное сообщение для Gvozd Посмотреть профиль Найти все сообщения от Gvozd
 
Регистрация: 04.04.2008
Сообщений: 6,246

ну, так вызывайте код, использующий t после того, как он будет известен.
если по какой-то сферической причине, вы не хотите использовать колбеки, то сперва один раз вызовите синхронный AJAX, а затем выставьте выполнение последующих запросов в setInterval.
таким образом, сразу за этим кодом уже известно значение t
Ответить с цитированием
Ответ



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

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