Autor Zpráva
David Klouček
Profil
Potřebuju v jedné aplikaci dynamicky přidávat několik file inputů a podle potřeby uploadovat jednotlivý soubory. Nahrávání souborů s klasickým reloadem stránky se kvůli ostatním AJAXovým komponentám vylučuje, jenže přes AJAX nejdou posílat soubory, tak chci použít plugin http://jquery.malsup.com/form/.

A teď kde je problém - po kliknutí na tlačítko "Nahrát" se normálně načte cílová stránka formuláře a to je mi k ničemu, já potřebuju odesílat data bez znovunačtení.

Celá stránka vypadá následovně:

<html>

<head>
    <script type="text/javascript" src="http://ajax.googleapis.com/ajax/libs/jquery/1.6/jquery.js"></script>
    <script type="text/javascript" src="http://ajax.googleapis.com/ajax/libs/jqueryui/1.8/jquery-ui.min.js"></script>
    <script type="text/javascript" src="http://malsup.github.com/jquery.form.js"></script>
</head>

<body>

<script type="text/javascript">
$(document).ready(function()
{
    $('#startUpload').submit(function()
    {
        $('#uploadForm').ajaxForm(
            {
                url      : './uploader.php',
                dataType : 'xml',
                iframe   : true,
                success  : function(data) {
                    console.log(data);
                }
            }
        );
    });
});
</script>

<form id="uploadForm" action="" method="POST" enctype="multipart/form-data">
    <input type="hidden" name="id" value="0">
    <input type="file" name="file"> <!--   !!   -->
    <input type="submit" id="startUpload" value="Nahrát">
</form>

</body>

</html>

Rady ze Stackoverflow nepomohly. Nevíte někdo co s tím?
_es
Profil
David Klouček:
přes AJAX nejdou posílat soubory, tak chci použít plugin http://jquery.malsup.com/form/
Smeruj jednoducho formulár na <iframe> na stránke, ani ten plugin to asi nerobí inak.
Chamurappi
Profil
Reaguji na Davida Kloučka:
Řekl bych, že na elementu s id="startUpload" nemůže nastávat událost onsubmit, kterou se snažíš chytit.
David Klouček
Profil
Chamurappi:
Máš pravdu, teď se ta událost volá. Momentálně řešim, proč se mi neposílá požadavek do uploader.php:

$(document).ready(function()
{
    $('#uploadForm').submit(function()
    {
        var array = {
            url      : './uploader.php',
            dataType : 'html',
            iframe   : true,
            success  : function(data) {
                alert(data);
            }
        };
        
        $('#uploadForm').ajaxForm(array);
        
        return false;
    });
});
_es
Profil
David Klouček:
Momentálně řešim, proč se mi neposílá požadavek do uploader.php
Ak to spravíš podľa rady v [#2], tak to máš funkčné bez pluginu, bez jQuery a dokonca úplne bez JS.
David Klouček
Profil
_es:
Radši to tak udělam.
David Klouček
Profil
Následující kód v jQuery má za úkol vložit data do iframu, ovšem nefunguje a já nechápu proč. Firebug mi žádný chyby nepíše a je to podle příkladů z internetu, nikde k tomu víc nepíšou.

<iframe id="x" src="" height="100" width="100">

<script type="text/javascript">
$(document).ready(function()
{
    $('#x').contents().html('text');
});
</script>

Začínam mít na Javascript vztek, protože je v něm bordel jako v C, u věcí jako jsou cookies si musim ručně napsat vlastní funkce..

Zrovna tak nedokážu pochopit, proč nejdou posílat soubory přes AJAX - brání snad něco programu (prohlížeči) komunikovat se serverem?!

Proč třeba musim mít pro blokování pop-up oken nějakej doplněk, nebo se to prohlížeč jenom snaží zachytit a nefunguje to tak, že by interpret Javascriptu prostě ignoroval kus kódu s tim pop-up?
_es
Profil
David Klouček:
vložit data do iframu
Ako vložiť? Možno si nepochopil radu v [#2]:
<form target="názovIframe" action="uploader.php" enctype="multipart/form-data">
<input type="file" name="subor">
<input type="submit" value="Nahrať">
</form>
<iframe name="názovIframe"></iframe>

Začínam mít na Javascript vztek, protože je v něm bordel jako v C
Neospravedlňuj tvoje neznalosti vlastnosťami programovacieho jazyka.
David Klouček
Profil
_es:
Jj, díky za radu, já to těď tak udělal. Ale je tu jinej zádrhel - po odeslání formuláře do iframe potřebuju zjistit co vrátil server, takže musim vytáhnout z toho iframe obsah. Mam podle návodu:

jQuery('#mojeIdIframu').contents().text();

A vrací to prázdnej string.
_es
Profil
David Klouček:
po odeslání formuláře do iframe potřebuju zjistit co vrátil server

Máš tri možnosti:
1) Najjednoduchšia je tá, že iframe je viditeľný a server vráti nejaký HTML dokument, ktorý informuje návštevníka, s akým výsledkom prebehlo nahratie súboru ([#5]).
2) Server vráti HTML dokument aj s nejakým JS, ktorý pomocou vlastnosti top má prístup k okolitému oknu.
3) Do document.getElementById('#mojeIdIframu').onload priradíš funkciu. V tej sa dá cez frames["názovIframe"] pristupovať k objektu window dokumentu načítaného do iframe.

Možno sa ti zíde: Co vlastně je jQuery?

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: