Autor Zpráva
Ajaxik
Profil *
Mám problém, dané volání nechodí v IE a OP, v FF chodí ok
používám aktualni knihovny jquery a jquery.form

$("#saveimg").ajaxSubmit({target: '#out-err', success:function() {
$("#in-btn").removeClass("hidden");
}
});
}});

Děkuji za radu
Ajaxik
Profil *
Pro upřesnění, chci přenest z formuláře type=file tzn.hodnotu $_FILES, lze to prosím provést?
Děkuji za pomoc
Chamurappi
Profil
Reaguji na Ajaxika:
Ne. Skript se k datům v souboru návštěvníka běžně nemá šanci dostat. Odešli formulář normálně a do jiného rámu (nastav mu atribut target).
Ajaxik
Profil *
Jej, vůbec nevím, jak to udělat. Není nějaký příklad?
Teď jsem na netu našel nejaký příklad s ajaxem, ale zatím stále tápu:
http://www.malsup.com/jquery/form/#file-upload
půl dne se motám stále v kruhu, zajímavé je, že v FF mě vše jde ok, v IE ne
Děkuji za každou radu


Používám: /*! jQuery v1.9.1 a
jQuery Form Plugin
* version: 3.32.0-2013.04.09

IE me hlasi chybu na řádku 530
Ajaxik
Profil *
Tak pokusničením jsem se dostal do následného stavu. Probl0m není úplně tak v dané js a volání ajaxSubmit nebo ajaxForm.
Na stránce mám následující:
 <form id="saveimg" enctype="multipart/form-data" action="picsave.php" method="post">
                <input class="hidden" type="file" name="savepic" id="savepic" onchange="jsFormSubmit('savepic', '1367866807');" />                              
                <table class="in-table">
                  <tr id="tr-err"><td><div id="out-err">Vyberte obrázek k nahrání do galerie.</div></td><td><span class="in-button load s1" id="in-btn" onclick="document.getElementById('savepic').click();"></span></td></tr>            
                </table> 
              </form>
Jde o to, že otevření dialogu pro výběr souboru dělám kliknutím na #in-btn, po výběru souboru na událost onchange #savepic přes jsFormSubmit již provádím přes ajax danou činnost. V FF to jde, v IE ne.
Ale, když výběr provedu přímo přes tlačítko input #savepic (tzn. není class="hidden"), tak daná činnost se také provede správně.
Abych se přiznal, tak daleko už mé znalosti nesahají. Kde je tedy problém? Jak udělat, abych výběr souboru aktivoval prvkem #id-btn, přičemž se další činnost v jsFormSubmit správně provedla?
Mnohokrát děkuji za pomoc
Ajaxik
Profil *
Tak nakonec další poznatek. Ve jsFormSubmit mám následující:
  else if (submit == 'savepic') {
    $("#in-btn").addClass("hidden");
    $("#out-err").html('<img src="../img/loader.gif" />Ukládám obrázek...); 
    $("#saveimg").ajaxForm({target: '#out-err', success:function() { 
            $.ajax({
               success: function(){    
               $("#in-btn").removeClass("hidden");
               }  
            });
         }}).submit();        

Když vybírám soubou přímo přes #savepic, v editačním políčku zůstane vidět cesta k vybranému souboru,
jestliže výběr provedu kliknutím na #id-btn a následně přes událost onchange, tak při volaní $("#saveimg").ajaxForm
cesta v editačním políčku #savepic zmizí.
Tak už opravdu nevím, jaký je v tom rozdíl? V prvním případě vše proběhne ok, v opačném případě se submit neprovede.
Prosím o pomoc
Ajaxik
Profil *
Vzdávám se, z nějakého důvodu je rozdíl při nastavení souboru v input type=file.
<input type="file" name="savepic" id="savepic" onchange="jsFormSubmit('savepic', '1367866807');" />
při přímém výběru tlačítkem v #savepic, proběhne vše ok
při nepřímém výběru přes jiný prvek, např.
<span class="in-button load s1" id="in-btn" onclick="document.getElementById('savepic').click();"></span>
nebo obdobně jinak
addEvent( document.getElementById('in-btn'), 'click', function(){ $('savepic').click(); } );
addEvent( document.getElementById('savepic'), 'change', function(){ jsFormSubmit('savepic', '1367866807'); } );
při $("#saveimg").ajaxForm hodnota v inputu prostě zmizí a submit se neprovede. Nevím proč....
_es
Profil
Ajaxik:
Prečo nepoužiješ normálny formulár? JS má z bezpečnostných dôvodov obmedzený/zakázaný prístup k súborom alebo aj len k ceste k súboru.
Ajaxik
Profil *
Teď nerozumím, jaký normální formlář? A jak říkam, v FF a CHROME to funguje bez problémů, ale IE je děs.
_es
Profil
Ajaxik:
jaký normální formlář?
Formulár definovaný značkou <form> Formuláře » form a vstupné pole pre odoslanie súbora Formuláře » input (type=file).
Ajaxik
Profil *
Ale to já přece dělám, vyplňuji pole prvku input #savepic, jen nechci, aby edit pole a tlačítko bylo vidět a pro aktivaci výběru jsem si vytvořil své tlačítko #in-btn. Jinak vše je standardní.
tzn. přes #in-btn kliknu na tlačítko #savepic, otevře se mě okno výběru souboru, vyberu soubor, po výběru na událost onchange volám script jsFormSubmit v kterém už volám přes ajaxForm submit, v FF se submit provede, v IE ne


Jinak, takto to řeším i u jiných formulářů, a vše probíha v poho i v IE, jediný problém je v tomto případě, tzn. při aktivaci výběru inputu type=file přes jiný prvek.
_es
Profil
Ajaxik:
„Normálne“ funguje odoslanie súboru na server úplne bez JS, ak nie, tak očakávaj problémy.
Ajaxik
Profil *
Ale ja v tom JS v podstatě jen volám submit. Tak kde je v daném případě problém? Nebo jak to obejít? Děkuji za pomoc
Chamurappi
Profil
Reaguji na Ajaxika:
Ne, nevoláš. Procházíš postupně všechny formulářové prvky, načítáš si jejich hodnoty, sestavuješ z toho vlastní HTTP požadavek a ten pak posíláš. To má opravdu hodně daleko k normálnímu odeslání formuláře.
AJAXem <input type="file"> spolehlivě poslat nejde.

Jej, vůbec nevím, jak to udělat.
<iframe name="něco">, <form target="něco"> … a až narazíš na problém, dodej odkaz na živou ukázku.
_es
Profil
Ajaxik:
Ale ja v tom JS v podstatě jen volám submit.
Prečo? Na čo? Normálne odosielacie tlačítko bez „JS podpory“snáď nefunguje?
Ajaxik
Profil *
No, moc zkušeností nemám.
A lze měnit v <div id="out-err">Vyberte obrázek k nahrání do galerie.</div> text dle stavu nahrávání?
v tomto případě jsem to prováděl napr. $("#out-err").html('<img src="../img/loader.gif" />Ukládám obrázek...);
_es
Profil
Ajaxik:
A lze měnit v <div id="out-err">Vyberte obrázek k nahrání do galerie.</div> text dle stavu nahrávání?
Stačí použiť riešenie v [#14], teda nie <div> ale <iframe> - stačí aby server v správnom čase odosielal vhodný výstup.
Ajaxik
Profil *
Tak pánové, moc děkuji za rady, opravdu toto řešení je lepší, ale...
na vphp.wz.cz/pokus.html je příklad:
jsou tam dvě řešení
1.je klasika, vyberete soubor a dáte Upload, funguje ok
2.jsou dvě možnosti
a)vyberete soubor a tim se i volá automaticky submit
b)stisknete Upload2, otevře se dialog pro výběr a po výběru by se měl opět automaticky udělat submit, ale neudělá (řádek 20, odepřen přístup),
a to je ten problém, nevím kde dělám chybu.
Děkuji za radu


jěště upřesnění, příklad 2a také funguje ok
Ajaxik
Profil *
Tak jsem tam dal další pokus vphp.wz.cz/pokus2.html a opět to nic nevrací.
ještě tu uvedu kod upload.php, ktery je shodný pro oba příklady.
$stav = "Soubor: ".$_FILES['file']['name']."               Soubor2: ".$_FILES['file2']['name'];
?>
<script> 
  window.top.window.uploadStatus("<?php echo $stav ?>");
</script>

Prosím, poradí mě někdo? Jde mě o příklad 1 (vphp.wz.cz/pokus.html ), možnost 2b viz. předchozí příspěvek,
tzn. že jiným prvkem aktivuji výběr souboru a pak se automaticky provede submit
Moc děkuji za pomoc
Amunak
Profil
Některé prohlížeče (v rámci ochrany uživatele) "protestují" při vynuceně odeslaném formuláři se souborem, a soubor nenahrají. Celkově je chování nahrávacího inputu hodně nevyzpytatelné, spolehnout se dá jen na klasické, "čistě HTML" odeslání na server. Kdybys potřeboval něco složitějšíího, budeš se muset podívat po nějakém java appletu nebo flash aplikaci.
Ajaxik
Profil *
Ale já nechci nic složitého, chci použít normální input type=file, jen nechci aby byl daný input vidět a proto aktivaci otevření dialogu výběru souboru chci provést jiným prvkem, nic víc. Už se s tím trápím druhý den, nevím co dělám špatně...
Amunak
Profil
Ajaxik:
Ano, to je taky věc, která je nespolehlivá, protože se prohlížeče snaží chránit uživatele. Fakt nedoporučuji s file inputem nic dělat kromě základního stylování.
Ajaxik
Profil *
No prohlížeče, např. v FF to jde v pohodě. V podstatě jak jsem pokusníčením za ty 3 dny zjistil, je to stále stejný problém, a je to úplně jedno jaké řešení jsem zvolil, přes ajax nebo přes iframe, jak mě bylo doporučeno.
OK, takže jak to udělat? Chci abych výběr souboru a následné submit udělal pouze tlačítkem, bez viditelnosti prvku input type=file (už jsem doložil i příklady na vphp.wz.cz/pokus.html , jak jsou požadovány k řešení).
Já už opravdu nevím, co dělat....
Moc děkuji za pomoc
_es
Profil
Ajaxik [#21]:
Viď Nefunkční click event na file input z jiného inputu (jQuery).
Ajaxik
Profil *
OK, aktivaci výběru přes jiný prvek přes onclick provedu, ale jak udělat, aby input type=file pri onchange udělal submit?
Amunak
Profil
Ajaxik:
Je opravdu tak těžké pochopit, že to spolehlivě nejde udělat? Ani zavolání click na inputu pro soubor není spolehlivé, ani automatické odeslání formuláře, který obsahuje file input. Přestaň se o to pokoušet. Jediné funkční řešení (pro nastylování file inputu) je to, na které odkázal [#24] _es. Pokud si s tím chceš hrát nějak víc (tedy zajímá tě automatické odesílání a otevírání dialogu pro výběr souboru), musíš zvolit nějaké jiné řešení, třeba přes zmiňovaný flash. Tuším, že Uploadify by to zvládl.

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:

0