Toon posts:

[ATLAS/Javascript] Hoe te returnen?

Pagina: 1
Acties:

Verwijderd

Topicstarter
Heyy,

Kben wat bsig met Atlas en als ik bijvoorbeeld een voornaam van iemand opvraag, kan ik dat op de volgende manier doen:

JavaScript:
1
2
3
4
5
6
7
8
9
10
function GetVoornaam()
    {
        Gulst.Service.GetVoornaam(OnGetVoornaamComplete);    
    }
    
    function OnGetVoornaamComplete(result)
    {
        document.getElementById("welcomeUser").innerHTML = result.Body;
        document.getElementById("userinfo").style.display = "";
    }


Dit werkt overgens perfect...

Maarrr.. nu kan het wel eens zo zijn dat ik op meedere punten wil weten wat iemands voornaam is... Maar ik kan zeg maar dan niet doen:

JavaScript:
1
result = Gulst.Service.GetVoornaam();


Je moet namelijk OnGetVoornaamComplete of iets dergelijks invullen die dan wordt aangeroepen.. maar hoe zou ik het dan zo kunnen doen dat ik de result op mijn 2e beschreven manier kan krijgen?

Verwijderd

Enig idee waarom het Ajax is, en niet jax?

Verwijderd

Topicstarter
Ja.. asynchronious.. maar is het dan echt niet mogelijk om dit te doen?

Want wat zou jij aanraden om dan op 5 verschillende punten dezelfde voornaam te krijgen? Die moeten op 5 verschillende manieren verwerkt worden.. dus zou ik 5 keer hetzelfde moeten maken ? :?

  • Koetjeboe
  • Registratie: Maart 2002
  • Laatst online: 22:11

Koetjeboe

Boe, zegt de koe

In OnGetVoornaamComplete de voornaam op al die 5 punten opslaan...?

Verwijderd

De boel zo programmeren dat je met een soort event de waarde kunt instellen waar dat nodig is. Je benadert het probleem van de verkeerde kant. Je script kan alleen opdracht geven om een nieuwe request te doen, en kan verder niets dan wachten. Kortom, als de response er eenmaal is, moet je vanuit die response alles benaderen. Er wordt een methode aangeroepen, en die methode zal moeten zorgen dat de waarden op de juiste plaats terecht komen.

In een programmeertaal als Java of C# zou je dit bijvoorbeeld met een event oplossen. Objecten die op een passieve manier iets te weten moeten komen, moeten zichzelf registreren met een eventhandler, en vervolgens die asynchrone request doen. De response die volgt moet zorgen dat de juiste events getriggerd worden, zodat de gegevens in elk geval terecht komen waar dat moet. En dan is het cirkeltje rond.

Verwijderd

Topicstarter
Dan weet je niet wanneer die klaar is met het ophalen van een voornaam.. Ook al veranderd je voornaam in het echt niet.. Hoe weet je dat voornaam dan veranderd?

Ik moet gewoon dingen constant kunnen opvragen, bijvoorbeeld ook:

[code]nieuwe_berichten = Gulst.Services.GetNewMessages()[/code]

Ik weet dat het asynchroon is.. maar toch zou ik zoiets moeten hebben.. anders ga ik strax echt omweg code, zoals ik het maar ff noem, maken


Okay.. begrepen.. maar in javascripts.. kun je daar ook events maken ? Ik heb namelijk wel eens events gebruikt in C# en dergelijke.. nu ik ff snel google kan ik er niks over vinden dan de standaard events..

[ Voor 22% gewijzigd door Verwijderd op 30-03-2006 19:16 ]


Verwijderd

Verwijderd schreef op donderdag 30 maart 2006 @ 19:14:
Dan weet je niet wanneer die klaar is met het ophalen van een voornaam.
Min of meer. Je zou eventueel bij een langskomend event waar de listener niets aan heeft de listener kunnen unregisteren zodat de events niet meer aankomen, en kunnen beslissen dat dat geldt als "geen response".

Je gebruikt Javascript nu om een soort applicatie te maken, het heeft dan meer met een volwaardige programmeertaal te maken dan met een script. Dat vereist een andere manier van werken.
Ik moet gewoon dingen constant kunnen opvragen, bijvoorbeeld ook:

code:
1
nieuwe_berichten = Gulst.Services.GetNewMessages()
Zo werkt dat niet. Dan kun je nog zo hard willen dat het wel werkt, maar dan moet je wat anders doen. Dan heb je een thread nodig (kun je simuleren met met window.setInterval of window.setTimeout) die om de zoveel tijd een request doet, en de resultaten buffert. Een functie uit een ander deel van je script kan dan wel direct de buffer opvragen. Maar dan heb je nog geen garantie dat de gegevens die je hebt nog actueel zijn.
Ik weet dat het asynchroon is.. maar toch zou ik zoiets moeten hebben.. anders ga ik strax echt omweg code, zoals ik het maar ff noem, maken
Zie boven.

Verwijderd

Topicstarter
Zeer duidelijke uitleg.. Ik snap het probleem ook wel.. maar met die timers lijkt me echt te omslachtig om te doen..

Ik zal kijken of ik het mss op een andere manier kan oplossen.. misschien nog directer Atlas aanroepen of iets dergelijks

Verwijderd

Verwijderd schreef op donderdag 30 maart 2006 @ 19:14:

Okay.. begrepen.. maar in javascripts.. kun je daar ook events maken ? Ik heb namelijk wel eens events gebruikt in C# en dergelijke.. nu ik ff snel google kan ik er niks over vinden dan de standaard events..
Nou, je hebt geen universeel Event object of iets dergelijks. Maar je kunt op een vrij eenvoudige manier een stel functie pointers in een array opslaan, en die dan in een loopje stuk voor stuk aanroepen, bijvoorbeeld:
JavaScript:
1
2
3
4
5
6
7
8
var eventListenerList = new Array ();

eventListenerList.push(window.open);
eventListenerList.push(/*een of andere functie pointer*/);

for (var i = 0; i < eventListenerList.length; i++) {
   eventListenerList[i]();
}

Zoek even naar een implementatie van addEvent vn bijvoorbeeld Scott Andrew, of beter nog: de overhaul van crisp en consorten ;)
Ik meen me te herinneren dat daarin iets dergelijks voorkomt. Sterker nog, ik kan me niet voorstellen dat het niet zo is.

Verwijderd

Topicstarter
Verwijderd schreef op donderdag 30 maart 2006 @ 19:28:
[...]

Nou, je hebt geen universeel Event object of iets dergelijks. Maar je kunt op een vrij eenvoudige manier een stel functie pointers in een array opslaan, en die dan in een loopje stuk voor stuk aanroepen, bijvoorbeeld:
JavaScript:
1
2
3
4
5
6
7
8
var eventListenerList = new Array ();

eventListenerList.push(window.open);
eventListenerList.push(/*een of andere functie pointer*/);

for (var i = 0; i < eventListenerList.length; i++) {
   eventListenerList[i]();
}

Zoek even naar een implementatie van addEvent vn bijvoorbeeld Scott Andrew, of beter nog: de overhaul van crisp en consorten ;)
Ik meen me te herinneren dat daarin iets dergelijks voorkomt. Sterker nog, ik kan me niet voorstellen dat het niet zo is.
Dat volg ik dus eventjes niet :| B) (ja.. grappig :P)

Stel, ik wil mijn nieuwe posts weten, wat moet ik dan volgensjou doen met de events? Als ik gebruik wil maken van events en Gulst.Services.GetNewPosts(); ?

Ik roep mijn eigen gemaakte functie aan.. GetNewPosts();

Die roept dan Gulst.Services.GetNewPosts(OnGetNewPosts); aan.. maar hoe verder?

(hypotetisch) NewPosts = GetNewPosts();

Hoe krijg ik dan met die events het result.Body in NewPosts?

[ Voor 17% gewijzigd door Verwijderd op 30-03-2006 19:50 ]

Pagina: 1