Pogledajte određenu poruku
Staro 13. 06. 2009.   #3
dee
Domagoj Horvat
Expert
 
Avatar dee
 
Datum učlanjenja: 24.07.2006
Lokacija: Zagreb
Poruke: 502
Hvala: 22
10 "Hvala" u 8 poruka
dee is on a distinguished road
Pošaljite ICQ poruku za dee
Default

Citat:
Originalno napisao mare_bj Pogledajte poruku
Ć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]
__________________
postoje ludosti bez kojih je nemoguce ljudsko dostojanstvo

Poslednja izmena od dee : 13. 06. 2009. u 13:34.
dee je offline   Odgovorite uz citat