dzięki raz jeszcze, ale trochę nie rozumiem, albo coś źle widzę
zostańmy przy jQuery
1)zrobiłem sobie funkcję
ajax(s)
{
var set{
url:s.url,
data:s.data,
asynchro:s.asyn,
cfun:s.cplFun/*itd*/
};
/*potem jest ajax z jQuery*/
$.ajax
{
/*między innymi*/
success: function(res){},
complete:function(XMLHttpRequest, textStatus){},
}
};
zrobione jest to tak, aby np w jednym mieć wszystko, np obsługę wygaśnięcia sesji, obiekt HTML (diva) do którego wrzuć trzeba treść zmienioną itp itd
2)wywołuje to tak
ajax({url:'/url/'.data:'id=1&o=11'});
wracając do podstawienia wyniku do zmiennej
to gdy chcę np uzyskanego JSON-a przekazać do zmiennej to przy asynchronicznym jest błąd związany z tym, że nie funkcja wykonuje się wcześniej niz trzeba
Funkcja COMPLETE wygląda tak
completefunction(XMLHttpRequest, textStatus)
{
if(typeof set.cfun == 'function')
{
gObiekty=(textStatus=='success')?eval(XMLHttpRequest.responseText):null;
set.cfun();
}
}
i na mój rozum powinna się wywołać już PO zakończeniu żądania - niestety tak nie jest
przykładowa funkcja wywoływana w complete
function cbPrzypiszObj(obj)
{
obj.uaktualnij();
}
czyli jest ona przekazywana w taki sposób w obiekcie (dokladniej w prototypie funkcji obiektu)
ajax({
...,s.cfun=function(){cbPrzypiszObj(this);}
});
sam prototyp wygląda tak
probki.prototype.uaktualnij=function()
{
this.nObj=gObiekty;
if(this.nObj.length)
{}
else
{}
}
no i w powyższym gdy jest połączenie synchroniczne wszystko jest OK, gdy jest asynchroniczne wskakuje mi do else - a jest tak (na razie) zrobione, że zawsze coś zwraca i nie ma prawa wejść do else
próbowałem różnych rzeczy, ale nic nie zadziało - w dalszym ciągu gdy jest asynchroniczonść to nie działa gdy jest synchronicznosć to działa - próbowałem to robić na succes, complete, kombinowałem z funkcjami, wyprowadzałem je na zwewnatrz (jako globalne a nie metody klasy) próbowałem funkcję ajax wywoływać na zewnątrz itp itd
nic nie pomogło do tej pory
może ktoś będzie miał jakiś pomysł?