Проблема с callback в xajax

Valeriy

Новичок
Проблема с callback в xajax

Хто знает как работают callback в xajax

xajax.call(xajax_processForm(xajax.getFormValues("signupForm")), {callback:bla()});

function bla()
{
alert("start");
}

Так вот "start" выскакивает до того как прийдет результат от xajax_processForm. Это так задумано, выполнение действий над резултатом до вывода, или гдето ошыбка у меня?

-~{}~ 07.07.08 11:04:

Ни кто не сталкивался с такой проблемой?
 

Valeriy

Новичок
дебаг говорит :
Mon Jul 7 10:47:34 UTC+0300 2008
WARNING: Invalid function request received; no request processor found with this name.Mon Jul 7 10:47:34 UTC+0300 2008
RECEIVED [status: 200, size: 149 bytes, time: 62ms]:<?xml version="1.0" encoding="utf-8" ?><xjx><cmd n="dbg">Invalid function request received; no request processor found with this name.</cmd></xjx>

Так не понятно какую функцию не находит -
xajax_processForm, или bla ?

-~{}~ 07.07.08 12:07:

вот пень не коректный вызов функции processForm
xajax.call(xajax_processForm(xajax.getFormValues("signupForm")), {callback:bla});

-~{}~ 07.07.08 14:01:

xajax.call('processForm',{parameters:[xajax_processForm(xajax.getFormValues('signupForm'))]});
в php
$xajax->register(XAJAX_FUNCTION, 'processForm', array('mode' => '"asynchronous"', 'method' => '"post"'));

не понятно почему все значения стают false, хотя форма отсылается, и что введено есть, но сразу меняется на false.
xajax 0.5.
Что не верно?
 

dimagolov

Новичок
смотри доку, что 2-м параметром в xajax.call
потому что ты отдаешь объект с одним свойством callback, которому присваиваешь или результат выполнени ф-ии bla, или ссылку на саму ф-ю.
 

Valeriy

Новичок
Помогите а то уже замучился
вот мой скрипт js
function submitSignup()
{
var i=0;
xajax.config.setDefault();
xajax.$("submitButton").disabled=true;
xajax.$("submitButton").value="please wait...";
xajax.$("result").innerHTML="please wait...";
xajax_processForm(xajax.getFormValues("signupForm"));
xajax.callback.global.onComplete = function() {
if (i == 0)
{
i++;
LoadingS();

}
return false;
}
return false;
}

function LoadingS()
{
var i=0;
while (i<15)
{
prs(i);
i++;
}
}

function prs(i)
{
myCallback = xajax.callback.create();
myCallback.onComplete = function() {
alert("complete");
}

xajax.call("parseHtmlHref",{callback:myCallback});
}

проблема вот в чем.
функция LoadingS(), в ней есть цыкл на 15 (может быть и на 1500) итераций, в цыкле вызываем prs(i), но почемуто скрипт не ждет пока xajax.call("parseHtmlHref",{callback:myCallback}); сделает что положено, а сразу вызывает опять prs(i), и так до конца. Потом начинает возвращать xajax.call, и выводить "complete". Можно как то заставить ждать результат выполнения xajax.call, а потом уже делать следующий вызов prs(i)?

-~{}~ 08.07.08 12:52:

Так что скажете?
 

est-in

Новичок
млин... путаница
я xajax не знаю но - В xajax.callback.global.onComplete ты пытаешься повесить еще myCallback.onComplete... Выглядит странно.

Расскажи по пунктам что должно происходить по нажатию submitButton

PS. На "чистом" ajax, без библиотек можешь реализовать?
 

Valeriy

Новичок
На "чистом" ajax, без библиотек можешь реализовать?
Это будет модуль, его задача делать sitemap или html, конкретного сайта, тоесть начиная от домена, пройтись по всем страницам, и по всем урлам что есть в этих страницах. И там все на xаjax уже сделано, так что нужно подстраиваться.

1. жмем на submitButton, передаем выбраный урл. +
2. находим все ссылки и выводим их +
за эти 2 пункта отвечает
xajax_processForm(xajax.getFormValues("signupForm"));
3. xajax.callback.global.onComplete
говорит что запустит обработчик текста только после того как будет сделан пункт 1и 2
Исполнятся только раз +
4.LoadingS()
должна проверить ве остальное

(+ - сделано)

вот и получается что цыкл while пробегается и запускает 15 раз prs(i) - ПОДРЯД, а потом уже на екране появляються результаты. А нужно так -
запуск prs(i) - получаем результат, выводим его, и тогда опять запукаем prs(i) .
xajax.callback.global.onComplete можно повесить все на это, но прервать ее не получается, и она цыклится.

-~{}~ 08.07.08 15:22:

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

function submitSignup()
{
var i=0;
xajax.config.setDefault();
xajax.$("submitButton").disabled=true;
xajax.$("submitButton").value="please wait...";
xajax.$("result").innerHTML="please wait...";
xajax_processForm(xajax.getFormValues("signupForm"));

xajax.callback.global.onComplete = function() {

if (i == 15)
{
return true;
}

xajax.$("status"+i).innerHTML="Checking";
xajax.$("time"+i).innerHTML="Checking";
xajax.$("parsing"+i).innerHTML="Checking";
xajax.$("title"+i).innerHTML="Checking";
xajax.$("description"+i).innerHTML="Checking";
xajax.$("last_mod"+i).innerHTML="Checking";
xajax_parseHtmlHref();
i++;
}
return false;
}

и над этим я мучался 3 дня (
 

dimagolov

Новичок
вот и получается что цыкл while пробегается и запускает 15 раз prs(i) - ПОДРЯД, а потом уже на екране появляються результаты. А нужно так -
запуск prs(i) - получаем результат, выводим его, и тогда опять запукаем prs(i) .
не знаю, есть ли в xajax возможность синхронной работы.... но тебе надо именно это.
если не вдаваться в детали xajax, то запрос к серверу надо делать не в цикле, а сделать массив вызовов и каждый следущий запрос делать из callback предидущего.
 
Сверху