Posílejte formulář přes AJAX - Krutá realita

Posílejte formulář přes AJAX

29.11.2005

ajax

V poslední době při programování mého rozsáhlého AJAXového projektu jsem narazil na několik problémů, které jsem musel vyřešit. Jedním z nich bylo i poslání dlouhého formuláře přes AJAX tak, abych se co nejméně nadřel  :-).

Zjištění hodnot všech elementů input

Relativně velkým problémem se pro mě stalo projít všechny podelemnty input, jež obsahují nějaké jméno, a načíst jejich obsah do nějaké proměnné. Zkuste se proto podívat na krátký javascriptový kód, kterým jsem to vyřešil.

var data = ''; var f_el = document.myform.getElementsByTagName('input'); var f_length = f_el.length; for(i=0;i<f_length;i++){ data += f_el[i].name + '=' + f_el[i].value + '&'; }

Jak to odeslat přes AJAX?

Dalším drobným problémem bylo, jak tyto data odeslat přes XMLHttpRequest tak, aby to PHP nebo ASP pohodlně zpracovalo. Rozhodl jsem se proto použít jednoduché kódování application/x-www-form-urlencoded, které v PHP načte všechna data do superglobální proměnné $_POST.

function form_save(){ xmlrequest.onreadystatechange = function() {processForm();}; xmlrequest.open("POST", 'save.php', true); xmlrequest.setRequestHeader("Content-Type", "application/x-www-form-urlencoded"); xmlrequest.send(data); }

Doplňkové informace

Protože tento kód samozřejmě není kompletní, další podrobnosti můžete nalézt na webu AppleDev - The XMLHttpRequest Object. Tento příklad je spíše jakési nakopnutí pro vývojáře AJAXových aplikací, co vědi o co jde a nenapadá je, jak elegantně řešit odeslání formuláře.

Přidat komentář

:-D 8-) :-) ;-) :-o :-( :evil: :idea:

Pro příspěvky je vyžadována podpora obrázků

Pro ověření zde prosím napište text, který vidíte na obrázku

mala drobnost od Martin 'Bilbo' Petricek

29.11.2005 #

Ma to jeden hacek: Co kdyz v nekterem formularovem poli bude treba ampersand? Vstup je treba osetrit  :o)

Takze nahradime

data += f_el[i].name + '=' + f_el[i].value + '&';

za

data += f_el[i].name + '=' + escape(f_el[i].value) + '&';

Na tohle spousta programatoru casto zapomina a je dobre to cas od casu pripomenout  :o)

Drobnosti od Jakub Vrána

29.11.2005 #

Pro ošetření dat doporučuji encodeURIComponent().

Pro obsluhu události není nutné vytvářet další funkci:
xmlrequest.onreadystatechange = processForm;

K větší univerzálnosti by se hodilo i poslání <select> a <textarea> a naopak neposílání "reset" a všech "submit".

od Llaik

02.12.2005 #

Zdravim Genia, snad tentokrat ten komentar projde  :)

http://php.vrana.cz/zobrazeni-prubehu-uploadu.php

Zadny Perl, haleluja.