Autor Zpráva
učenec
Profil *
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
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 *
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 *
"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 *
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.

Vaše odpověď

Mohlo by se hodit

Neumíte-li správně určit příčinu chyby, vkládejte odkazy na živé ukázky.
Užíváte-li nějakou cizí knihovnu, ukažte odpovídajícím, kde jste ji vzali.

Užitečné odkazy:

Prosím používejte diakritiku a interpunkci.

Ochrana proti spamu. Napište prosím číslo dvě-sta čtyřicet-sedm: