Javascript.RU

Создать новую тему Ответ
 
Опции темы Искать в теме
  #1 (permalink)  
Старый 27.12.2012, 15:45
Новичок на форуме
Отправить личное сообщение для Andrey-Iz Посмотреть профиль Найти все сообщения от Andrey-Iz
 
Регистрация: 27.12.2012
Сообщений: 7

не своевременное исполнение функции
Делаю первые шаги в написании userscript-ов. Столкнулся с проблемой когда результат выполнения функции появляется позже, чем исполняются следующие за ней операторы.(Конечно сужу по алертам, могу и ошибаться, тем более ошибка где-то ведь существует). Был бы рад помощи.
Вот фрагмент:
// вызов
           var kk=0;
	var kk=rez_snab (urlsnab);
	alert(kk);
//.................................................
    function rez_snab(url2) {
      var k=0
      	$.get(url2, function(data) {
	  k=2;
	alert(k);
         });
	alert(k);
	return k;
    }

По алертам получается: 0(kk), 2(k) , 2(k). Хотелось бы понять почему kk!=2.
Ответить с цитированием
  #2 (permalink)  
Старый 27.12.2012, 15:55
без статуса
Отправить личное сообщение для Deff Посмотреть профиль Найти все сообщения от Deff
 
Регистрация: 25.05.2012
Сообщений: 8,219

Andrey-Iz,
У Вас ассинхронный Аякс, поэтому обработку ставим в саllback Аякс функции (или вызывайте из саllback доп функцию обработки/отображения
Ответить с цитированием
  #3 (permalink)  
Старый 27.12.2012, 16:08
Новичок на форуме
Отправить личное сообщение для Andrey-Iz Посмотреть профиль Найти все сообщения от Andrey-Iz
 
Регистрация: 27.12.2012
Сообщений: 7

К своему стыду не понимаю вашего ответа. Может чуток по расширенней.
Ответить с цитированием
  #4 (permalink)  
Старый 27.12.2012, 16:23
Аспирант
Отправить личное сообщение для skfyann Посмотреть профиль Найти все сообщения от skfyann
 
Регистрация: 27.12.2011
Сообщений: 90

function(data) выполнится после того, как будет получен ответ от сервера.
Так как запрос асинхронный, то пока нет ответа будет выполняться весь остальной код.
Но у вас получается так, если я не ошибаюсь.
0(k) -> приходит ответ, k=2 -> 2(k) -> 2(kk)
Ответить с цитированием
  #5 (permalink)  
Старый 27.12.2012, 16:34
Новичок на форуме
Отправить личное сообщение для Andrey-Iz Посмотреть профиль Найти все сообщения от Andrey-Iz
 
Регистрация: 27.12.2012
Сообщений: 7

skfyann, если я правильно понял, то как сделать чтобы основная функция "ждала" function(data) ?
Ответить с цитированием
  #6 (permalink)  
Старый 27.12.2012, 16:36
без статуса
Отправить личное сообщение для Deff Посмотреть профиль Найти все сообщения от Deff
 
Регистрация: 25.05.2012
Сообщений: 8,219

Сообщение от Andrey-Iz
skfyann, если я правильно понял, то как сделать чтобы основная функция "ждала" function(data) ?
Вызов основной функции(вместе с передаваемыми параметрами) делаете в концовке function(data)
Ответить с цитированием
  #7 (permalink)  
Старый 27.12.2012, 16:38
Новичок на форуме
Отправить личное сообщение для Andrey-Iz Посмотреть профиль Найти все сообщения от Andrey-Iz
 
Регистрация: 27.12.2012
Сообщений: 7

skfyann, и по алертам именно так :0(kk), 2(k) , 2(k)
Т.е. var kk=rez_snab (urlsnab) как-бы игнорируется.
Ответить с цитированием
  #8 (permalink)  
Старый 27.12.2012, 16:39
без статуса
Отправить личное сообщение для Deff Посмотреть профиль Найти все сообщения от Deff
 
Регистрация: 25.05.2012
Сообщений: 8,219

// вызов
           var kk=0;
	var kk=rez_snab (urlsnab);
//Обработка
    function MyFunc(k,gata) {
      	  alert(k);
    }
//.................................................
    function rez_snab(url2) {
      var k=0
      	$.get(url2, function(data) {
      	   k=2; MyFunc(k,gata) ;
         });
    }
Ответить с цитированием
  #9 (permalink)  
Старый 27.12.2012, 21:00
Новичок на форуме
Отправить личное сообщение для Andrey-Iz Посмотреть профиль Найти все сообщения от Andrey-Iz
 
Регистрация: 27.12.2012
Сообщений: 7

Deff, прошу прощения что не сразу отвечаю.(дела)
Спасибо. Скопировал ваш вариант. Вашу мысль вроде понял, но вот скрипт нет.

Сообщение от Andrey-Iz
var kk=rez_snab (urlsnab) как-бы игнорируется.
Не верно. Игнорируется(пропускается) конкретно это:
$.get(url2, function(data) {
	           k=2; MyFunc(k,data) ;
	         });

Исправил в вызове gata на data. Понимаю что так должно быть.

Последний раз редактировалось Andrey-Iz, 27.12.2012 в 21:18.
Ответить с цитированием
  #10 (permalink)  
Старый 27.12.2012, 21:15
Новичок на форуме
Отправить личное сообщение для Andrey-Iz Посмотреть профиль Найти все сообщения от Andrey-Iz
 
Регистрация: 27.12.2012
Сообщений: 7

Т.е последовательность такова:
к=0
$... - пропускается
кк = к //т.е.=0
$... - cрабатывает
к=2
Но уже поздно. кк получено и =0

Последний раз редактировалось Andrey-Iz, 27.12.2012 в 21:19.
Ответить с цитированием
Ответ



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

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


Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
Получение ответа от функции в которой выполняется ajax Kelly Общие вопросы Javascript 7 10.09.2012 16:23
Установить имя конструктора Андрей Параничев Общие вопросы Javascript 8 17.11.2011 10:09
Как присвоить текстовому полю исполнение функции? vistecter Элементы интерфейса 2 24.06.2011 20:16
динамическое содержимое функции alfmaster Общие вопросы Javascript 2 28.05.2011 17:10
arguments вызвавшей функции mister_maxim Общие вопросы Javascript 4 12.10.2010 16:21