Aszinkron fájl feltöltése egy rejtett iframe azaz megkülönböztetett
Ebben a cikkben ismertetett úton aszinkron fájlok letöltését alapján biztosított a HTML-szabvány adatátviteli kapacitását a formában bármilyen IFRAME, az oldalon elérhető. Az űrlap kapcsolódó IFRAME keresztül «target» tulajdonság, amely egybeesik az attribútum «név» az IFRAME.
Azzal kezdtem, hogy ő írta egyfajta HTML prototípus meghatározni a megfelelőségét ez a módszer működik minden böngészőben.
Nyomon követni, hogy mi jön a formában a szerver létrehozott «upload.php» egy fájlt az alábbi kódot:
Megnéztem - még működik IE (Internet Explorer 8 módban IE7).
plusz feladat, amely hozzá van rendelve az eseménykezelő «onChange» INPUT elem:
Azt hittem, mindent megtettem a fejében, de nem egy kicsit belőle. A Mozilla Firefox, Google Chrome, Opera és minden pontosan úgy működik, ahogy kellene, de IE okozott feltűnést. Összes elemet hoztak létre, első pillantásra, ez normális, de sabmite formák valamilyen oknál fogva, a küldött adatok nem a IFRAME és egy új ablakban, a $ _FILES tömb üres volt, és a $ _POST tömb megjelent elem «feltöltés» gomb . Nyilvánvaló, hogy az adatot a INPUT valahogy nem volt $ _FILES és a $ _POST. Ez a helyzet áll elő, ha a forma nem utal a módszer kódoló adatokat, ha elküldik a szerver „multipart / form-data” (attribútum «enctype»). Meglepett. Néztem DOM fejlesztő eszközöket.
Tanulás DOM-, és megállapította, hogy az attribútum «enctype» formájában áll éppen, mint amire szüksége van, de ahelyett, hogy az INPUT és IFRAME attribútum «név» attribútum «submitName». Meglepett még. Világossá vált, hogy miért az adatokat a forma nem a IFRAME elrepült, és egy új ablakban -, mert a IFRAME megadott néven a tulajdonság «target» formájában az oldalon hiányzik (ez a neve valamilyen okból vált «submitName» tulajdonság).
Bár a helyzet a találati adatokat az INPUT-és a tömb $ _POST $ helyett _FILES még, és ez továbbra is tisztázatlan, úgy döntött, hogy a megszüntetése a probléma «név» attribútum az INPUT és a IFRAME.
Megpróbálta beállítani az értéket az attribútum «név» nem a setAttribute () metódus, hanem csak egy objektum tulajdonság: input.name = feltöltés és frame.name = „frame”. Az eredmény ugyanaz.
Googling gyorsan rájöttek, hogy a probléma a «submitName» IE valóban az a hely kell. A megoldás erre a problémára nagyon egyszerű volt - meg kell létrehozni elemeket keresztül innerHTML azonnal tönkölybúza attribútum «név». Tetszett a megoldást találtak a terek az internet, lehetővé teszi a hozzáférést az elem, mint egy tárgy, annak ellenére, hogy ő, sőt, jön létre a innerHTML. Az egyszerűség kedvéért ezt a módszert működésre tervezték.
Meg kell jegyezni, hogy használja ezt a megközelítést az IE valamilyen okból nem lehet beállítani a INPUT attribútum «típust» a setAttribute (), vagy egy objektum tulajdonság, így a type = „file” szintén előírják a innerHTML.
Végül szerzett, és az IE.
De a probléma az IE, hogy az adatok az input-alakú, és nem tartoznak a $ _FILES tömböt, még fennmaradt. Ismét nézett DOM fejlesztő eszközök - formájában valóban érdemes enctype = "multipart / form-data". WTF. Miután sok gondolkodás, a kísérletezés és gugleniya, próbált regisztrálni formájában attribútum «enctype» kellős innerHTML.
Ó, egy csoda. Ez szerzett. Ennek fényében a felfedezés, egy természetes kérdés merül fel -, hogy mennyire bízhat meg az IE fejlesztői eszközöket?
Tehát a következtetés, hogy letölthető fájlokat mindig nagyon keresett, megváltoztatta a «upload.php» Fájl kód:
A fájlok letölthetők a «» feltöltések mappát riasztások eredményeiről szóló jelentést a letöltés. Úgy működik minden böngészőben, beleértve az IE. A cél eléréséig.
A csatolt cikket archívum megtalálja a végleges változat a script aszinkron felküldések keresztül egy rejtett iframe-t.