Citat:
Originalno napisao mare_bj
Ćao!
1. Na koji način postići da closures rade i u okviru callback funkcija? U primeru ispod sam prvo setovao promenljivu prom1 i promenio sam joj vrednost u okviru callback funkcije koja se nalazi u $.post. Međutim, kao rezultat alert(prom1) dobio sam "1"!
Kôd:
$(function()
{
var prom1 = "1";
$.post("/nekiurl/", {}, function(data)
{
prom1 = "2";
});
alert(prom1);
});
2. Na koji način pauzirati kod dok se ne okonča izvršenje callback funkcije, u ovom mom primeru između kraja $.post-a i alert(prom1)?
|
Kako rece misk0 to ima veze sa sinhronim ili asinhronim procesiranjem skripte. Sinhrono ce cekati da dodje response i onda nastaviti, a asinhrono ce nastaviti sa izvrsavanjem od slijedece linije, a poziv callback funkcije ce se desiti asinhrono kad se vrati response.
http_request.open('GET/POST', url + parameters,
true);
posljednji bool parametar je
is async, dakle, flag koji govori kako ce zahtjev biti procesiran.
Medjutim, opcenito, puno je preglednije i 'ljepse' da odradis sve asinhrono. Dakle, na nekom mjestu u kodu radis request, a u callbacku radis obradu responsa jer sasvim je logicno da ono sto stigne u response postoji u okviru callbacka a ne sire. Ako ti pak to treba i negdje drugdje, onda iz callback funkcije pozivas dalje funkcije i prenosis sta trebas.
To je, uostalom, i bit AJAXa da svaki entitet u okviru DOMa ima svoju komunikaciju sa serverom bez da se petlja u scope koji je siri od njega samog.
[EDIT]
Dakle, konkretan razlog je: zahtjev ode asinhrono i treba mu neko vrijeme da se vrati response i pozove callback u kojem postavljas prom1 = "2". Medjutim, u medjuvremenu, izvrsavanje skripte je vec otislo dalje i prirodno ti dalo "1" jer u trenutku prije nego se vrati response prom1 je jos uvijek "1".
[/edit]