Модераторы: Sardar, Aliance

Поиск:

Ответ в темуСоздание новой темы Создание опроса
> jQuery, ajaxComplete или как-то еще? отловить завершение функции 
:(
    Опции темы
youri
Дата 20.7.2009, 17:23 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Участник
Сообщений: 740
Регистрация: 17.4.2004

Репутация: нет
Всего: 16



я имел в виду
Код

function a1( success ){
  jQuery.getJSON( Url, function(json) {
    a2(json);
    success && success();
  });
}

function a9(){
  a1(function() {
    // к этому моменту a3, a4, a5 уже выполнились
  });
}


вариант ksnk: неявная передача callback'а. Но нужно ли это в данном случае? (кто-то хочет прострелить себе ногу?) Но если очень хочется, можно тем же jQuery воспользоваться

Код

function a1( success ){
  jQuery.getJSON( Url, a2);
}

function a2() {
  ...
  $(a2).trigger('mySuperMegaEvent');
}

function a9(){
  $(a2).bind( 'mySuperMegaEvent', function() {
    // к этому моменту a3, a4, a5 уже выполнились
  } )
  a1();
}

PM   Вверх
ksnk
Дата 20.7.2009, 19:39 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


прохожий
****


Профиль
Группа: Комодератор
Сообщений: 6855
Регистрация: 13.4.2007
Где: СПб

Репутация: 38
Всего: 386



вот более корректный код. даже, вроде, работает ;-)
Код

<script>
function callAfter(x){
   var dep=window[x] && window[x].callAfter;
   while(dep && dep.length>0){
       var x=dep.pop();
       x.func.apply(this,x.arg) ;
   }
}
function setCallAfter(x,func,arg){
   var dep=window[x] && window[x].callAfter;
   if(!dep) {
       window[x].callAfter =[]; dep = window[x].callAfter;
   }
   if(func)
       dep.push({func:func,arg:arg||[]});
}
function a1(){
//   alert('a1');
    a1.resourceComplete = false;
    setTimeout(function(){
       a1.resourceComplete = true;
        window._VALUE+='a1 complete! '; 
        callAfter('a1');
    },2000);
}
function a8(arg1,arg2,arg3){
// wait till all resources complete
  if(!a1.resourceComplete) {
    setCallAfter('a1',a8,[arg1,arg2,arg3]);
    return ;
  }
   // do something
  window._VALUE+='a8 complete! '; 
  callAfter('a8');
  alert(window._VALUE); 
}


</script>
<input type="button" onclick="window._VALUE=''; a1();a8()" value="click">



Добавлено через 1 минуту и 51 секунду
youri, для этого а1 должна знать, что а2 вызвали после нее. А если не вызвали?..


--------------------
Человеку свойственно ошибаться, программисту свойственно ошибаться профессионально ! user posted image
PM MAIL WWW Skype   Вверх
youri
Дата 20.7.2009, 19:59 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Участник
Сообщений: 740
Регистрация: 17.4.2004

Репутация: нет
Всего: 16



Цитата(ksnk @  20.7.2009,  19:39 Найти цитируемый пост)
youri, для этого а1 должна знать, что а2 вызвали после нее. А если не вызвали?..

a1 не должна этого знать: a9 должна учитывать, что событие может не возникнуть, если произошла ошибка при выполнении ajax-запроса, но что должно происходить в случае ошибки ТС не говорил. Кроме того, твое решение - это те же события, только сформулированные в других терминах
PM   Вверх
ksnk
Дата 20.7.2009, 22:06 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


прохожий
****


Профиль
Группа: Комодератор
Сообщений: 6855
Регистрация: 13.4.2007
Где: СПб

Репутация: 38
Всего: 386



Цитата(youri @  20.7.2009,  19:59 Найти цитируемый пост)
это те же события, только сформулированные в других терминах 
 Аналогия, конечно есть, хотя можно сказать, что все программы, это те-же буквы, только по разному переставленные smile




Это сообщение отредактировал(а) ksnk - 20.7.2009, 22:06


--------------------
Человеку свойственно ошибаться, программисту свойственно ошибаться профессионально ! user posted image
PM MAIL WWW Skype   Вверх
Ответ в темуСоздание новой темы Создание опроса
1 Пользователей читают эту тему (1 Гостей и 0 Скрытых Пользователей)
0 Пользователей:
« Предыдущая тема | JavaScript: Применение библиотек | Следующая тема »


 




[ Время генерации скрипта: 0.0440 ]   [ Использовано запросов: 21 ]   [ GZIP включён ]


Реклама на сайте     Информационное спонсорство

 
По вопросам размещения рекламы пишите на vladimir(sobaka)vingrad.ru
Отказ от ответственности     Powered by Invision Power Board(R) 1.3 © 2003  IPS, Inc.