Версия для печати темы
Нажмите сюда для просмотра этой темы в оригинальном формате
Форум программистов > JavaScript: Применение библиотек > ajax: функции, переменные...


Автор: Ant88 16.5.2007, 09:55
Здравствуйте, 

Имеем примерно такой код: 

 
Код

var vrlb = 0;

someFunc();

function ajaxFuncOne(num){
   x_blaBlaBla(num, ajaxFuncTwo);
}

function ajaxFuncTwo(result){
   vrlb = result;
}

function someFunc(){
  for (i=0, i<10, i++){
     ajaxFuncOne(i);
     if(vrlb==0) {...}
     else if(vrlb==1) {...}
     else {...}
  }
}


Далее есть PHP скрипт, функция blaBlaBla($num) которого собственно возвращает значения типа integer. 
Используется библиотека Sajax. 
Так вот: в функции someFunc() всегда выполняется код, соответствующий значению переменной vrlb равному 0, хотя это значение должно изменяться (и изменяется) при вызове ajaxFuncOne(). Почему?????????

Автор: vasac 17.5.2007, 10:04
Где отправляется запрос? Где он обрабатывается? Где x_blaBlaBla? Где комментарии?

Автор: Ant88 17.5.2007, 10:58
К примеру так...

Вот php-скрипт, содержащий запрашиваемую функцию, с ним проблем нет

Код

<?php
function blaBlaBla($num){              
        return $num;                                    // ну к примеру так, для краткости :)
}


sajax_init();                                             // инит саякса
sajax_export("blaBlaBla");                      // экспорт с префиксом 'x' (x_blaBlaBla - вот она объявляется)
sajax_handle_client_request();
?>


далее html содержащий JS

Код

<script language="javascript">
<?php sajax_show_javascript(); ?>
var vrlb = 0;          // вот переменная, значение которой изменяет ф-ция

someFunc();         // запускаем основную ф-цию JS

function ajaxFuncOne(num){                 // объявляем ф-цию, которая запускает ajax-овую ф-цию
   x_blaBlaBla(num, ajaxFuncTwo);        // и передает результ в ф-цию ajaxFuncTwo (см.ниже)
}

function ajaxFuncTwo(result){              // и она изменяет значение переменной, объяв в начале
   vrlb = result;
}

function someFunc(){                          // вот основная ф-ция данного JS-кода
  for (i=0, i<10, i++){
     ajaxFuncOne(i);                             // здесь мы запускаем ajaxFuncOne с аргументом 0 - 9
     if(vrlb==0) {...}                             // и идет проверка переменной
     else if(vrlb==1) {...}
     else {...}
  }
}
</script>


Вот.

Автор: vasac 17.5.2007, 12:06
Я не знаток sajax, но обычно аяксовые запросы выполняются в асинхронном режиме (на то он и Ajax). 
Скорее всего и у вас так же. К тому времени, когда выполняется цикл ни один ответ еще не пришел.

Автор: BuShaRt 17.5.2007, 12:14
Ant88, 
switch гораздо удобней else if... имхо else if - крайнее извращение... 

А вы уверенны что значение $i изменяеться? (как вы это проверяли?)
И то, что if ($i==0) {тут}  у вас переменная $i не изменяет значение?

Автор: Ant88 17.5.2007, 12:29
switch удобнее, не спорю. не в этом суть, код, понятно дело схематичный и рождался на коленке.

Ну то что значение i изменяется, это точно, это ж переменная цикла.
А вот насчет vrlb - не факт. 
Я пробовал еще так: вместо vrlb значение изменяло <input type="text" name="vrlb"> и соответственно в if() было условие другое: document.all.vrlb.value==?.
тут наглядно демонстрировалось, что значение изменяется как и должно.
Скорее всего проблема заключается именно в том, что ответов еще нет...
Как бы это можно обойти?

Powered by Invision Power Board (http://www.invisionboard.com)
© Invision Power Services (http://www.invisionpower.com)