Autor Zpráva
MONTYCEK
Profil
Zdravím, mám takový menší chat, kde odesílám zprávu přes javascript (jQuery). Potřeboval jsem tam doplnit možnost přiložit soubor, ale nebyl jsem si jistý zda to jde takto odeslat, ale strýček google mi pomohl najít následující řešení.

$('.muj_formular').submit(function(evt){           
  evt.preventDefault();
  var formData = new FormData($(this)[0]);       
  $.ajax({
    url: 'index.php?odeslat_zpravu=1',
    type: 'POST',
    data: formData,
    async: false,
    cache: false,
    contentType: false,
    enctype: 'multipart/form-data',
    processData: false,
    success: function (response) {
      nacist_zpravy();              
    }
  });
  return false;
});

Funguje to přesně jak potřebuji, ale narazil jsem na problém při odesílání přes mobilní telefon (os Android), kde se při odeslání formuláře neodešle vubec nic, zkoušel jsem i vložit za $('.muj_formular').submit(function(evt){ tuto část alert(), ale také se nezobrazí.

Máte s tím někdo zkušenosti?
juriad
Profil
MONTYCEK:
Starší Androidy (<3.0) neznají FormData.

Mimohodem, $(this)[0] je přesně this.
MONTYCEK
Profil
juriad:
A dalo by se to nějak řešit, aby pokud třeba prohlížeč tuto položku nebude znát, tak aby se to dalo i přes to odeslat?
juriad
Profil
MONTYCEK:
Ano, jde to, ale musíš získat data od jinud.
Použij podmínku:
var formData;
if (typeof FormData == 'undefined') {
  formData = ... // nějak jinak získat infomace z formuláře
} else {
  formData = new FormData(this);
}

Mimochodem, kam jsi přidal ten alert? Před 3. řádku kódu v [#1], nebo až za ní?
MONTYCEK
Profil
juriad:
Ten alert jsem vložil přímo za tuto část
$('.muj_formular').submit(function(evt){
juriad
Profil
Jakou verzi jQuery a jaké další knihovny používáš na mobilní stránce?
MONTYCEK
Profil
juriad:
Mám tam pouze jQuery v2.1.3 a potom vložený skript na to odeslání.

Ještě poznatek: Testoval jsem to v základním prohlížeči, ale když jsem si nainstaloval mobilní verzi Firefoxu, tak odeslání textu se podařilo, ale soubor se mi nedařilo přiložit (po přiložení došlo k refreshi stránky), ale to je trochu jiný problém.
Chamurappi
Profil
Reaguji na MONTYCEKa:
FormData nefungují ve větším množství dosud používaných prohlížečů a nevím o tom, že by JS mohl jiným způsobem zprostředkovat upload souboru.
Na tvém místě bych použil <iframe>, formulář bych normálně odesílal do něj a nová stránka načtená v něm by jen zavolala nějakou parent.funkci(), aby rodič věděl, jak to dopadlo. To poběží všude.

Mám tam pouze jQuery v2.1.3
Zbytečně retardovaná verze, nefunguje ve starších prohlížečích. Proč vůbec používáš jQuery, když ne na to, aby zahladilo nekompatibility?
_es
Profil
MONTYCEK:
A preco neodosles subor normalne z obycajneho <input type=file>? To bude fungovat aj vo velmi starych prehliadacoch a dokonca aj bez JS.
MONTYCEK
Profil
Chamurappi:
No v minulosti jsem to právě pomocí <iframe> řešil, ale pár lidí mi právě doporučilo ajax, protože je to prý pohodlnější řešení, ale nezdá se mi. Vyzkouším ještě pár věcí a pokud nic nepomůže, tak se vrátím k tomu <iframe>.


_es:
Protože potřebuji, aby k odeslání došlo bez jakékoliv aktualizace stránky. Jedná se o klasický formulář, takže <input type=file> se zde nachází, ale potřeboval bych ta data odeslat jakoby na pozadí a po odeslání akorát vyresetovat inputy na prázdné hodnoty.


Chamurappi:
"Zbytečně retardovaná verze, nefunguje ve starších prohlížečích. Proč vůbec používáš jQuery, když ne na to, aby zahladilo nekompatibility?"
To nevím jak si myslel. jQuery využívám, protože jsem si na to zvykl a myslel jsem, že je celkem kompatibilní se všemi prohlížeči, aspoň jsem tedy doposud nenarazil na žádný problém.
_es
Profil
[#10] MONTYCEK:
Tak potom pouzi radu v [#8]. Nic ine, dostatocne funkcne vo viacerych prehliadacoch, k dispozicii nemas.

myslel jsem, že je celkem kompatibilní se všemi prohlížeči
Mas to predsa aj na oficialnych strankach: http://jquery.com/browser-support/
MONTYCEK
Profil
_es:
Využiji ten iframe, protože každá rada, kterou jsem doposud vygoogil funguge polovičatě.
MONTYCEK
Profil
Tak už to mám vyřešené pomocí toho <iframe>.
Akorát nefungovala ikonka, která měla vyvolat okno pro výběr souboru, ale přišel jsem na to, že se tomu mobilnímu prohlížeči nelíbílo, že <input type=file> má nastavenou vlastnost display:none.
Nastavil jsem tedy šířku i výšku toho inputu na 0px a vše funguje jak má.
_es
Profil
MONTYCEK:
Akorát nefungovala ikonka, která měla vyvolat okno pro výběr souboru
Prečo to je cez „ikonku“ a nie ako normálne formulárové políčko pre výber súboru? Čo tým návštevník získa? Akurát mu to v niektorých prehliadačoch nebude fungovať a pomýli ho to. Keď už, mohol by si skúsiť radu v Nefunkční click event na file input z jiného inputu (jQuery).
MONTYCEK
Profil
_es:
Celý ten chat je hlavně pro komunikaci malé skupiny lidí. Není to tudíž primární funkcí, tak nebude problém v tom, že by to nefungovalo, ale odzkoušel jsem to ve více prohlížečích a problém s tím nebyl. A přes formulářové políčko jsem to neudělal, protože mám ten formulář nastylovaný přesně na určité rozměry a zbývá zde pouze místo o velikosti 50x50px. Myslím, že by vypadalo dost divně umístit tam klasické <input type=file>.

Náhled:

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: