AJAX upload souborů

Možné řešení je uploadovací formulář odeslat na zpracovávající skript do neviditelného <iframe>, soubor se nahraje a skript zavolá funkci z nadřazené stránky a předá jí výsledek snažení.

Nahrávání bez refreshe

Po kliknutí na „Upload“ se soubor odešle do skrytého <iframe>u na skript, který soubor zpracuje a zavolá funkci na této stránce s předaným parametrem (pro pochopení si zobrazte zdrojový kód).

Ukázka (nic se nikam nenahrává)

Soubor s formulářem

Funkce uploadStatus se bude volat ze stránky načtené v <iframe>u prostřednictvím window.top.window.uploadStatus().

<script>
function uploadStatus(status) {
	alert(status);
}
</script>
<iframe id="frame" name="frame" src="" style="display: none"></iframe>

<form action="upload.php" method="post" enctype="multipart/form-data" target="frame"> 
  <input type="file" name="file"> 
  <input type="submit" name="upload" value="Upload"> 
</form> 

Soubor pro nahrávání upload.php

<?php
// Vlastní nahrání souboru
$stav = "Hláška ze souboru, který uploaduje.";
?>
<script> 
  window.top.window.uploadStatus("<?php echo $stav ?>");
</script>

Vlastní upload v PHP může vypadat nějak takto.

Vypnutý JavaScript

Bude-li mít uživatel vypnutý JS, je toto řešení značně problematické — po odeslání do neviditelného rámu se zdánlivě nic nestane.

  1. V případě, že potřebujeme funkčnost i bez JS a není potřeba s výsledky uploadu ihned dále pracovat, může se výsledek vypsat přímo do rámu, který bude v takovém případě viditelný.
  2. Je-li s výsledky potřeba pracovat, nezbývá než použít standardní odesílání.

To je všechno. Líbil se vám článek a chcete se dozvědět, až vyjde další?

Sledujte:

 

Připomínky mi pište do komentářů ↓

Zapamatování formulářových polí

Automatické zapamatování formulářů

Při vyplňování delších formulářů se je hodí obsah průběžně ukládat. Jak na to?

Plynulý přesun focusu

Plynulý přesun focusu

Plynulé přesouvání focusu mezi jednotlivými položkami formuláře.

AJAX

AJAX

Asynchronní načítání částí stránek a odesílání formulářů bez obnovení celé stránky.

Zvyšování hodnoty inputů

Zvyšování hodnoty inputů

Jak zpříjemnit zadávání číselných hodnot nebo času do <input>ů tlačítky plus a mínus.

Duplikování položek formuláře v JS

Přidání dalšího textového pole

Jak umožnit kopírování/přidávání dalších textových polí do formuláře.

Komentáře