AJAX form post
Van egy HTML FORM-om, amit JS/XMLHttpRequest segítségével szeretném POST-olni.
A FORM nagy mennyiségű dinamikusan generált INPUT CHECKBOX elemet tartalmaz, a felhasználó által kiválasztottak értékeit (value/name?) szeretném elküldeni.
A SEND függvény az alábbi hibával leáll: (Firefox9+FireBug)A hibával kapcsolatban nem sok infót találtam, de úgy látom függvény STRING-et várna.
Van valami egyszerű módja, hogy a CHECKBOX-ok értékét el tudjam küldeni? (pl. beépített konvertáló függvény)
Vagy jobb ha nekiállok ismerkedni valamely JS keretrendszerrel? (pl. jQuery és társai)
■ A FORM nagy mennyiségű dinamikusan generált INPUT CHECKBOX elemet tartalmaz, a felhasználó által kiválasztottak értékeit (value/name?) szeretném elküldeni.
A SEND függvény az alábbi hibával leáll: (Firefox9+FireBug)
Component returned failure code: 0x80460001 (NS_ERROR_CANNOT_CONVERT_DATA)
XMLHttpRequestObjectForSavingCategories.send(document.forms["categories_form"]);
Van valami egyszerű módja, hogy a CHECKBOX-ok értékét el tudjam küldeni? (pl. beépített konvertáló függvény)
Vagy jobb ha nekiállok ismerkedni valamely JS keretrendszerrel? (pl. jQuery és társai)
Ha a kódot mutatnád ami a
Ha a
XMLHttpRequestObjectForSavingCategories
egyXMLHttpRequest
példánya és "POST" kérést akarsz küldeni, akkor nem a form-ot kell neki átadni, mert az egy "object" típus, és a form "submit" eseményéhez kötnék egy eseményfigyelőt, amiben a checkbox-ok értékeit escape-elve név érték párokban tenném asend
metódus paraméterébe, és letiltanám a form elküldését.a kód
Na hát ez számomra több
1.
var dataSource = "<?php echo site_url()?>/catUpdate.php";
Ide valami épkézláb URL kell, nem pedig PHP echo mert azt max. a szerver oldalon írja ki a PHP, ez pedig a böngészőben fut.
2.
XHRSaveCats.setRequestHeader('Content-Type', 'multipart/form-data');
helyett pl.:
XHRSaveCats.setRequestHeader('Content-Type', 'application/x-www-form-urlencoded');
3.
XHRSaveCats.send(document.forms["categories_form"]);
A
send()
metodust arra használhatod "POST" kérésnél hogy a "query string"-et teszed bele amikor küldöd a kérést. egy ilyesmire gondolok:ajandek=true&aktualis=false
A form elemek "name" attributumában ne használj ékezetet, és az értékeket pl a
encodeURIComponent()
függvény segítségével escape-eld.Most megiszom a reggeli kávém, aztán a HTML kódodra mutatok egy szebb megoldást, ha addig nem sikerül.
Ui.: egyébként a
XMLHttpRequestObjectForSaving.send(null);
mit csinál?Ui.: Ui.: Az
onreadystatchange
eseménykezelőt azopen()
metódus hívása elött állítsd be, a te kódodban nincs jelentősége, de azopen()
kiváltja az "readystataechange" eseményt.1. var dataSource = "<?php
1. var dataSource = "<?php echo site_url()?>/catUpdate.php";
Ide valami épkézláb URL kell, nem pedig PHP echo mert azt max. a szerver oldalon írja ki a PHP, ez pedig a böngészőben fut.
Egy működő kódot módosítottam
Ide valami épkézláb URL kell, nem pedig PHP echo mert azt max. a szerver oldalon írja ki a PHP, ez pedig a böngészőben fut.
Konkrétan itt PHP->JS adatátadás történik, azaz az oldal generálásakor teszi oda az URL-t. Ez WP alatt van, nekem műkszik.
A send() metodust arra használhatod "POST" kérésnél hogy a "query string"-et teszed bele amikor küldöd a kérést. egy ilyesmire gondolok:
ajandek=true&aktualis=false
Volt már működő kódom, amivel adatokat kértem le szerverről, hogy mit azt meg url-ben kódoltam. Egy ilyen működőt kezdtem áthegeszteni és valami módot keresni arra, hogy ne kelljen nekem JS-el végigmenni a DOM-on és a FORM elemeit kivadászva átalakítani egy URL kódolt formába.
Sima FORM-ot küldésekor (hagyományos AJAX nélküli módon) a FORM összes elemét automatikusan bekódolja (gondolom a böngésző).
Asszem ezzel zárja be a kapcsolatot.
Na valami ilyesmit
Lépésről-lépésre 1.
1. átírtam a gombot, és eltávolítottam a "onClick" részt
Lépésről-lépésre 2.
5. mentés előtt lekérem az összes ilyen osztályba tartozó elemet
A kiválasztott kategóriák azonosítóit nem lehet elküldeni csak egy sima tömbként?
A kiválasztott kategóriák
Mit értesz "azonosító" alatt?
Hasznos linkek:
XMLHttpRequest.send() - Nem tanulmányoztam mélyen, mert eddig nem volt ilyenekre szükségem, de van lehetőség a
send()
metódusbanobject
típusú adatot átadni.FormData()
Azonosítók tömbként
Az INPUT CHECKBOX "value" mezőjében tárolt értéket (egész szám).
A szervernek igazából csak ezekre a számokra (wordpress post kategória azonosító) van szüksége.
Jelenleg <id>=<value> párokban küldöm az adatokat URL-be kódolva, ami kb így néz ki:
localhost/catUpdate.php?1=true&53=true&12=true&...
Itt a <value> effektíve felesleges, mert csak a "true" (azaz bejelölt CHECKBOX) értékeket küldök, minden <id> mellé.
De nekem ez is elég lenne: 1,53,12,...
vagy valami JS tömb, a kategóriák azonosítóival, amit utána PHP POST már tud kezelni.
A .send() fgv.-t majd este átnézem.