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

Поиск:

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


Шустрый
*


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

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




есть несколько исходных функций в которых выполняются Ajax-запросы, получение и обработка результата. 

как можно определить с помощью ли jQuery или как-то, что данные не только получены, но и обработаны, чтобы запустить следующие процедуры?


PM MAIL   Вверх
Samotnik
Дата 14.7.2009, 15:58 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Super star !
****


Профиль
Группа: Awaiting Authorisation
Сообщений: 7192
Регистрация: 4.11.2006
Где: Минск City

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



Код

$.ajax({
   type: "POST",
   url: "some.php",
   data: "name=John&location=Boston",
   success: function(msg){
     alert( "Data Saved: " + msg );  //  вот тут и есть результат 
   }
 });


 smile 
PM MAIL   Вверх
Leshak
Дата 14.7.2009, 16:23 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Шустрый
*


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

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



Samotnik, 

или я не понял крутости ответа, или плохо объяснил проблему...

Код


function a1(){
jQuery.getJSON( Url, function(json) { a2(json) ;});  // спросили
}

function a2(rj){              // услышали
  rj1 = function a3(rj);    //  обрабтали так 
  rj2 = function a4(rj1);    //  обрабтали эта 
  rj3 = function a5(rj2);    //  обрабтали ещё 
}
...
// прошли разные события
// но все повторяется, хоть и по другому

function a9(){
  function a1(); // спросили, и если ответили, то и обработали по вся-кому 
  rj9 = function a8(rj3); // а эта функция захочет выполниться не дожидаясь 
                                     // результатов a3, a4, a5...
}



вот такая у меня проблема..  smile 

Это сообщение отредактировал(а) Leshak - 14.7.2009, 16:23
PM MAIL   Вверх
Samotnik
Дата 14.7.2009, 16:42 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Super star !
****


Профиль
Группа: Awaiting Authorisation
Сообщений: 7192
Регистрация: 4.11.2006
Где: Минск City

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



Leshak, не понимаю. Что нужно ?
Узнать когда функция отработала ?  Продебаж  smile   firebug в помощь. 
PM MAIL   Вверх
Leshak
Дата 14.7.2009, 17:13 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Шустрый
*


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

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



Samotnik, 

угу.... значит забываю уже русский язык... попробую по другому:

по этому адресу http://www.walks.ru/new.html
лежит моя проблема

дорога до нее следующая (выбираем эти пункты среди других) :

[ Россия ][ Москва ][ Метро ][ Кольцевая линия ] - [ станция ’Киевская’ ]

на  станции ’Киевская’, после загрузки внизу страницы картинок с дополнительными видами этой станции, прокручиваем горизонтальный скрол вправо до конца и кликаем по последней картинке
открывается информация о том, что тут можно пересесть с "Кольевой линии" на "Арбатско-покровскую линию"

если посетитель выбирает пересадку - мне надо "загрузить" описание всего нового маршрута, обработать его, и только после этого создавать на "страничку" с информацией о той станции, на которой мы окажемся после пересадки.

смотрим на пример выше:

Код

function a9(){
  function a1(); // спросили, и если ответили, то и обработали по вся-кому 
  rj9 = function a8(rj3); // а эта функция захочет выполниться не дожидаясь 
                                     // результатов a3, a4, a5...
}



а9 - обеспечивает "пересадку"
  а1 - загружает новый маршрут
  а8 - должна собрать описание конкретной станции,
но а8 запускается не дожитаясь окончания  процессов  а1, а2, а3, а4
и поэтому а8 не получает данные, необходимые для ее работы...  

отсюда и возникает мой вопрос - как можно запустить а8  только после того, как отработают все нужные процессы?


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


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


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

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



Leshak, Сначала нужно четко себе представить, какую цепочку ajax-запросов и по каким действиям пользователя нужно сделать. У меня чего-то неполучилось smile


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


Опытный
**


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

Репутация: 4
Всего: 22



Блин, те же яйца, только в профиль ... функция а8 будет исполняться ДО того, как а2 назначит переменную rj3. Лучше ту же а8 вызывать по получению ответа с сервера.
PM MAIL   Вверх
Nigel
Дата 14.7.2009, 21:54 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


познаю мир
**


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

Репутация: 1
Всего: 19



Leshak, зачем вам эти a1-19, rj1-rj9. Сами же потом и путаетесь. Через неделю вообще забудете, как и что делали. Пишите нормально и придет к вам понимание.
PM MAIL   Вверх
Leshak
Дата 15.7.2009, 09:57 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Шустрый
*


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

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



ksnk, Nigel, 

как, что и в каком порядке должно выполняться я себе хорошо представляю
для того чтобы найти причину этой ошибки пришлось основательно переписать скрипт,  избавиться от излишнего кода и сделать текст читабельней и короче.
Цитата(Nigel @  14.7.2009,  21:54 Найти цитируемый пост)
Leshak, зачем вам эти a1-19, rj1-rj9. Сами же потом и путаетесь.

это только попытка объяснить свою проблемму, которая заключается в следующем - Ajax привел к тому, что программа исполняется не последовательно и возникают параллельные процессы.
JavaScript позволяет отлавливать разные события (клики, фокусы, загрузки) - но возникла необходимость ожидать выполнение  одних процессов, чтобы запускать следующие. На уровне ожидания XMLHttpRequest - это реализованно, а как быть с пользовательскими функциями?

Цитата(IDVsbruck @  14.7.2009,  21:06 Найти цитируемый пост)
Лучше ту же а8 вызывать по получению ответа с сервера. 


Угу - прощай структурное программирование, долой функции, вперед к линейному тексту и оператору GOTO !  :(


неужели никто не решал подобную проблему? 

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


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


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

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



Кто знает какие рессурсы нужно для запуска такой-то функции? Если это знает сама функция, можно подвесить какой-нибудь цикл ожидания при вызове. 
К примеру вот так может выглядеть функция, которая не ждет ничего особенного от жизни 
Код

function a1(){
    a1.resourceComplete = false;
    $.ajax(...
      function(){
           a1.resourceComplete = true;
      }
}

Вот так - функция, которая для старта обязательно должна получить результат выполнения a1
Код

function a8(arg1,arg2,arg3){
// wait till all resources complete
  if(!a1.resourceComplete) {
    setTimeout(function(){
       a8.call(this,arg1,arg2,arg3)    
    },100);
    return ;
  }
   // do something
   a8.resourceComplete = true;
}

А вот обработчик события при котором обязательно должны выполниться a1 и a8
onclick="a1();a8(); return false;"

Это сообщение отредактировал(а) ksnk - 15.7.2009, 10:29


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


Шустрый
*


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

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



ksnk, 

О! а про рекурсию я и не подумал - наверно по причине того, что память  и так расходуется неприлично и все еле шевелится...
Это уже ВАРИАНТ! - спасибо!
 надо будет проверить - пока поставил заглушку в другую ветку и ищу глюки... :(
PM MAIL   Вверх
youri
Дата 17.7.2009, 09:35 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


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

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



Leshak, а почему не вызвать a8 в конце a2? Если после a2 не обязательно должна выполняться a8 или может выполняться другая функция, то можно передавать a8 в a2 через параметр. Всякие таймеры, имхо, крайний случай
PM   Вверх
Leshak
Дата 20.7.2009, 09:29 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Шустрый
*


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

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



youri, 
так сейчас и делаю - при запуске а9 вывешиваю флажок с параметром, а по завершении а2 проверяю его и в зависимости от параметра  запускаю или нет а8...
но это не красиво :(


ksnk, 
рекурсия с таймаутом работает как-то неустойчиво... да и выглядит кривова-то :(

хотелось бы иметь инструмент типа

$(function2() ).ready(   function8() { /* ... */}  );
по исполнению function2() выполнить function8()

...

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


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


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

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



Ну, тогда примерно вот так
Код


//более корректный код лучше смотреть ниже...





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


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


Шустрый
*


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

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



ksnk, 

Ух-ты!
Это уже высшая математика пошла - с ходу даже прочесть не смог.. :(

буду разбираться по слогам!
PM MAIL   Вверх
Ответ в темуСоздание новой темы Создание опроса
0 Пользователей читают эту тему (0 Гостей и 0 Скрытых Пользователей)
0 Пользователей:
« Предыдущая тема | JavaScript: Применение библиотек | Следующая тема »


 




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


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

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