[ PeraKojovic @ 10.10.2007. 10:40 ] @
Pozdrav,

koje metode za asinhrono on-demand ucitavanje slike preporucujete.
Konkretno:
1. u web stranici odaberem nesto iz menija,
2. na serveru na osnovu nekog IDa pokupim iz SQL Servera 2000 sliku
ili jos bolje pozovem Web servis koji to uradi
3. slika treba asinhrono da stigne u neki div/img,
4. po pristizanju slike, (lokalni) naziv te slike treba da prosledim java
appletu koji je zaduzen za dalji rendering te slike

Za pocetak samo preporuka za neki AJAX framework, ili koriscenje
.ashx asinhronih hendlera ili...? A kasnije mozemo otvoriti detaljniju diskusiju.


Pera

[ noviKorisnik @ 10.10.2007. 12:04 ] @
Evo preporuke, primer:
Code:
<select id="sorser" onchange="menjajSors (this.value);">
    <option value="">- biraj -</option>
    <option value="http://farm3.static.flickr.com/2328/1504623644_0d8a742470_o_d.jpg">kec</option>
    <option value="http://farm3.static.flickr.com/2148/1496652871_06ef7616dd_o_d.jpg">dva</option>
</select>
<img id="slika" width="1" height="1" onload="promenjenoJe ();" />
<textarea id="monitor" cols="99" rows="8"></textarea>
<script>
function menjajSors (sors) {
    if (sors == '') return;
    document.getElementById ('slika').src = sors;
    pribelezi ('menjanje');
}
function promenjenoJe () {
    pribelezi ('promenjeno');
}
function pribelezi (fraza) {
    document.getElementById ('monitor').value += new Date ().toString () + ' ' + fraza + ' ' + document.getElementById ('slika').src + '\n';
}
</script>

Testiraj, videćeš da radi asinhrono, jer img element ima hendler onload - to bi trebalo da bude dovoljno, a rekao bih i da je prilično jednostavno.

Nije mi jasna tačka 2 opisa scenarija, no to ne pravi nikakvu frku dogod zahtev šalješ get metodom i dobijaš nazad sliku s regularnim zaglavljem i sadržajem.

Za tačku 4, nadam se da znaš kako s tim na kraj, nisam se bakćao s apletima pa ne mogu dalje ni da pomognem.
[ PeraKojovic @ 10.10.2007. 12:31 ] @
Mozda nisam bio bas najjasniji u vezi pojma "po pristizanju slike".
U datom primeru se funkcija PrimljenaJe pokrece, cim i prvi stream slike
stigne.
Ja pokusavam sledece:
tek kada slika stigne U CELOSTI, odnosno kada je lokalni browser
cache-ira (snimi) kod sebe, ja mogu da prosledim njen URL ili fizicku adresu
te KOMPLETNO STIGLE, SNIMLJENE slike mom appletu.
Napisao sam kod koji radi traljavo, namerno ga nisam postavio, zelim da
se konsultujem sa kolegama, da vidimo razlicite pristupe.

Deo sa DB nije bitan, kao ni deo sa appletima, ali sam radi kompletnije
slike objasnio sta pokusavam..

Pozdrav
[ bzero @ 10.10.2007. 13:06 ] @
Citat:

...
U datom primeru se funkcija PrimljenaJe pokrece, cim i prvi stream slike
stigne.
Ja pokusavam sledece:
tek kada slika stigne U CELOSTI
...


U ovom primeru sto je dao nK, desava se upravo to, promenjenoJe() se poziva na onload event slike, tj kada je browser ucita (u celosti).
[ noviKorisnik @ 10.10.2007. 13:33 ] @
... jedini problem bi mogao biti ako bi koristio animirane gifove, jer oni okidaju onload na svakom frejmu animacije. Za sve ostale slučajeve verujem da nije potrebno ništa komplikovanije od ovog.
[ Miroslav Ćurčić @ 12.10.2007. 18:07 ] @
Može li ovako:
Code:

function UcitajSliku(gde, url, callback)
  newImage= new Image();
  newImage.src= url;
  while(!newImage.complete) {
  }
  Obj= document.getElementById(gde);
  Obj.src= url; // slika je keširana pa će ovo ići momentalno
  // sad pozovi taj callback
}

Inače znate li način kako da sliku učitanu u newImage prebacim direktno u Obj umesto što se oslanjam na to da će biti keširana.
[ noviKorisnik @ 12.10.2007. 20:58 ] @
Možda može, ali mi se nikako ne sviđa ta while petlja.
[ Miroslav Ćurčić @ 13.10.2007. 16:50 ] @
hm, šta predlažeš, kako očitavati property "complete",
nisam primetio probleme u radu ovog koda.
[ noviKorisnik @ 13.10.2007. 18:03 ] @
Zašto vrteti petlju dogod se ne desi complete, kad je već podržan event handler onload koji se okida u istom trenutku kada se menja property complete?

I da nema tog onload, opet je besmisleno stalno vrteti praznu petlju, onda bi mogao da se podesi setInterval koji bi to proveravao na svakih 24ms, dovoljno.
[ PeraKojovic @ 16.10.2007. 16:22 ] @
Hvala na zanimljivim odgovorima i podršci za ovu temu. U principu sam rešio problem,
oko čega je i počela zainteresovanost za datu problematiku.

Ako nekog interesuje, problem se sveo na to da ako java appletu pokazem src ka
slici negde, on sam blokira rad svega ostalog, dakle, on je zahtevao sinhrono
ucitavanje slike. Problem je moguce bilo resiti na vise nacina

1. da se da SRC nekoj skrivenoj slici na stranici, pa njen onload event da se upotrebi
za sada dodeljivanje te kesirane slike appletu

ili,

2. da se u appletu napravi poseban tred koji po dobijanju naziva udaljene slike, bio to
ashx hendler ili sta god, samostalno-asinhrono ucitava/vuce sliku sa neta, a trenutno
vraca akciju nazad na stranicu/jscript

Pozdravi,
Pera