Formularfelder "sammeln" und bei Ajax-Aufruf als Parameter mitschicken - wie?

Kryptaesthesie

Erfahrenes Mitglied
Hallo.
Ich nutze JQuery zum Laden eines Teilbereichs der Seite:
Code:
        /* Daten abrufen */
        $.post(loadResource,
                     { tableID: "admin_reporting", comboauswahl: comboboxingSelected, site: seite },
                         function(data) { verarbeiteGeladeneDaten(data); },
                       "html");
So weit so gut, das klappt wunderprächtig.
Jetzt möchte ich aber noch ein Formular verarbeiten. Spricht alle Formularelemente (Key) und deren Werte (Value) als Parameter übergeben, also an 'site: seite' anhängen.
Ich habe mir schon mal eine Methode geschrieben, die mir die Form-Elemente entsprechen raussucht:
Code:
    function getAlleSelectorFeldwerte()
    {
        var all = "";
        $('#admin_reportingSelector :input').each(function(i){
           if(i > 0) all = all + ", ";
           all = all + this.name + ": '" + this.value + "'";
         });
        //alert(all);
        return all;
    }
Ausgabe: feld1: katze, feld2: hund

Meine Frage nun, wie muss ich getAlleSelectorFeldwerte() abändern, dass ich es mit als Parameter abschicken kann?

Im IRC sagte man mir:
serializeArray and use a json stringify (json2.js) to turn the obj into a string to send
Aber leider weiß ich da nicht weiter.


Danke euch schon mal für eure Hilfe!
Gruß
Gerrit
 
Moin Gerrit,

so könnte es bspw. laufen:

Code:
$.post(loadResource,
        $.extend(
                  { tableID: "admin_reporting", comboauswahl: comboboxingSelected, site: seite},
                    getAlleSelectorFeldwerte()
                ),
        function(data){ verarbeiteGeladeneDaten(data);},
        "html");
                       
                       
 function getAlleSelectorFeldwerte()
    {
        var all = new Object();
        $('#admin_reportingSelector :input').each(function(i){
           all[this.name]=this.value;
         });
       return(all);
    }

getAlleSelectorFeldwerte() gibt die Daten als Objekt zurück.

Deine "Standarddaten":
Code:
{ tableID: "admin_reporting", comboauswahl: comboboxingSelected, site: seite}
werden per $.extend() mit diesem Objekt zusammengeführt, Ergebnis ist ein einziges Objekt, welches als Argument verwendet wird.
Fertsch :)
 
Guten Morgen.
Ich komme leider noch nicht zum Ziel.
Ich habe die Funktion getAlleSelectorFeldwerte() jetzt abgeändert in:
Code:
    function getAlleSelectorFeldwerte()
    {
        return $('#admin_reportingSelector :input').serializeArray();
    }
Es wird kein Fehler geschmissen, aber die Feldinhalte kommen nicht auf der per Ajax angesprochenen Seite an.
Das Parameter-Objekt baue ich so auf:
Code:
paras = $.extend( { tableID: "admin_reporting", comboauswahl: comboboxingSelected, site: seite}, getAlleSelectorFeldwerte() );
Der Aufruf sieht dann so aus:
Code:
$.post(loadResource,
                     paras,
                     function(data) { verarbeiteGeladeneDaten(data); },
                     "html");
Hast du noch eine Idee?
Danke schon mal für deine Hilfe!
Gruß
Gerrit
 
Hallo noch einmal.
Ich greife diesen Thread noch einmal auf.

Code:
$('#xyzSelector :input').each(function(i){
gibt mir ja alle input-Felder des Formulars. Dabei sind auch Radiobuttons. Wie erweitere ich diesesn Selector, dass alle Felder und von den Radios nur die aktiven in der each-Schleife auftauchen?


Schönen Dank schon mal! :)
Gruß
Gerrit
 
Es gibt zwar diverse Attributselektoren in JQuery, aber nur die Möglichkeit, mehrere per AND zu verknüpfen...für dein Anliegen bräuchte man aber ein OR, um sowohl nicht-Radios als auch gecheckte Radios zu erfassen.

Du kannst das aber in der Funktion erledigen, ersetze jenes:
Code:
all[this.name]=this.value;
...hierdurch:
Code:
if(this.type!='radio' || this.checked)all[this.name]=this.value;
(ungetestet :-()
 
Guten Morgen :)

Es gibt zwar diverse Attributselektoren in JQuery, aber nur die Möglichkeit, mehrere per AND zu verknüpfen...für dein Anliegen bräuchte man aber ein OR, um sowohl nicht-Radios als auch gecheckte Radios zu erfassen.
Das hatte ich mir schon gedacht, aber ich dachte mir, ich frag' lieber noch mal nach! ;-)


Du kannst das aber in der Funktion erledigen, ersetze jenes:
Code:
all[this.name]=this.value;
...hierdurch:
Code:
if(this.type!='radio' || this.checked)all[this.name]=this.value;
(ungetestet :-()
Eine derartige Lösung schwirrte mir auch im Kopf umher :)
Danke für deine Hilfe!

Gruß
Gerrit
 

Neue Beiträge

Zurück