Autor | Zpráva | ||
---|---|---|---|
učenec Profil * |
#1 · Zasláno: 9. 8. 2014, 18:06:25 · Upravil/a: učenec
Ahoj,
napsal jsem funkci, které poskytnu soubor jako parametr. A chci z ní vrátit url na ten soubor (obrázek). bohužel netuším jak na to, jelikož jak je tam funkce vnořená ve funkci tak nevím kde v té funkci to vlastně vracet. Předem děkuji za pomoc. function geturl(file) { var reader = new FileReader(); var url; url = reader.onload = function(e) { return e.target.result; }; return reader.readAsDataURL(file); } zapomněl jsem zmínit že ta url je obsažená v e.target.result |
||
_es Profil |
#2 · Zasláno: 9. 8. 2014, 18:27:47
učenec:
S tou hodnotou predsa potrebuješ niečo spraviť, nie? Tak napíš to, čo sa má s tou hodnotou spraviť, namiesto príkazu return v 7. riadku. Funkcia geturl nemôže z princípu pracovať tak, ako si myslíš. Prečítaj si vlákna Využití proměné ve funkci (+ debata o sychronním AJAXu) a Vracení hodnoty z AJAXu pomocí return. Rovnaký problém s pochopením základného princípu.
|
||
učenec Profil * |
#3 · Zasláno: 9. 8. 2014, 18:30:22
to co s tou url chci udělat nemůžu udělat v těle onload funkce, proto to chci vrátit z funkce geturl(). no podívám se na ty odkazy
|
||
_es Profil |
učenec:
Ono to máš celé nejako nezmyselné. Na čo tam je nevyužitá premenná url , do ktorej je priradená tá vnorená funkcia? Objekt FileReader má slabšiu podporu. Naštudoval si si vôbec niekde, ako sa s tým objektom pracuje?
„ta url je obsažená v e.target.result“ To sa mi nezdá: developer.mozilla.org/en-US/docs/Web/API/FileReader.result „to co s tou url chci udělat nemůžu udělat v těle onload funkce“ Prečo by si nemohol? |
||
učenec Profil * |
#5 · Zasláno: 9. 8. 2014, 18:52:56 · Upravil/a: učenec
"To sa mi nezdá:" to se ti nemusí zdát ale je to tak. vrací to obsah v podobě url pokud se zavolá reader.readAsDataURL(file); a proč nemůžu? prostě se to tam nehodí.
učenec: je to nesmyslné z toho důvodu, že už jsem zkoušel všechno možné abych to rozchodil. nepodařilo se. |
||
_es Profil |
učenec:
Ak ti server vracia správnu hodnotu - to čo chceš, tak je potom naozaj problém len v nepochopení princípu asynchrónnosti. Odoslanie dát na server, ich spracovanie serverom, odoslanie odpovede prehliadaču a jej prijatie a spracovanie prehliadačom predsa nejaký čas trvá, nemôžeš mať odpoveď k dispozícii skôr, než je to vôbec možné. Na to, aby sa s odpoveďou pracovalo vtedy, keď dorazí, slúži udalosť onload
„a proč nemůžu? prostě se to tam nehodí.“ Takže vlastne „môžeš“. „nehodí sa“ a „nedá sa“ je niečo iné. Nič iné ti ani nezostáva. |
||
učenec Profil * |
#7 · Zasláno: 9. 8. 2014, 19:18:38 · Upravil/a: učenec
Ale já na server nic neposílám! všechno se to děje u klienta.
každopádně jsem to vyřešil jinak. už to jde jen ukázka o co jsem se vlastně pokoušel: http://www.spectrik.ic.cz/gallery/ po dragnutí obrázků se vypíše jejich seznam. A při najetí na každou položku seznamu se zobrazí náhled daného obrázku. na to jsem musel použít filereader() |
||
_es Profil |
učenec:
„sem to vyřešil jinak“ Vlastne tak, ako bolo radené, že funkcia nič nevracia a spraví potrebné v rámci obsluhy udalosti onload .
„Ale já na server nic neposílám! všechno se to děje u klienta.“ Tak som to správne nevysvetlil, no základný princíp asynchrónnosti platí rovnako. |
||
Časová prodleva: 10 let
|
0