Allgemeine "Ajax-Brücke" - einmal Ajax für jedes Formular??

  • Heyho, ich hab mal wieder ne Frage:
    Die Seite an der ich arbeite basiert bereits auf einem Ajax-Framework (Vorlage: Advitum-Tutorial, mit dem ich die Inhalte dynamisch ändere.


    Nun mein Problem und die Frage dazu: Ich möchte im statischen Teil ein Ajax-Script einbinden, dass eventuelle Formularvalues aus dem dynamischen Teil entgegennimmt und asynchron an ein PHP-Skript leitet, die Antworten erhält und asynchron einbindet. Ich habe dazu das hier gefunden: Ajax/PHP, frage mich aber nun, wie ich das so einbinde, dass es auch bei Leuten funktioniert, die zB NoScript aktiviert haben.


    Meine Idee: Das Formular aus Ajax/PHP so zu ändern:

    HTML
    <form action="ajaxdata.php" method="post">
    <label>Name:</label>
    <input name="vorname" id="vorname" type="text" />
    <label>Vorname:</label>
    <input name="nachname" id="nachname" type="text" />
    <button onclick="galerypicture()" type="submit">Senden</button>
    </form>
    <div id="preloader" style="display:none"><img src="325.gif" width="20" height="20" /></div>

    Würde das funktionieren? Mein Ziel ist es, dass die Seite NICHT neu lädt, wenn Ajax funktioniert, man das Formular aber durch Seite neu laden und PHP-Direktaufruf trotzdem nutzen kann, falls Ajax nicht geht.


    Und könnte ich die Ajax/PHP-Vorlage so erweitern, dass man sie auf jedes Formular anwenden könnte? Dass Ajax quasi (zB per input type="hidden") "erkennt", an welches PHP-Skript die daten geleitet werden sollen?

  • Also würde sich die Seite nicht neu laden, auch wenn man ein action mit submit dazuschreibt?


    Und wie schreibe ich diese Funktion um, dass sie auf jedes Formular passt?

    Denn das ist ja die Funktion, die die Daten weiterleitet, oder irre ich mich da?
    Ich denke, da bräuchte man (ein) Array(s), zB für die values, aber wie arbeite ich die dann in die Parameter ein?


    Für die verschiedenen PHP-Skripts war meine Überlegung, dass so zu ändern:

    JavaScript
    function galerypicture(script){
    [...]
    SELFPHP.ajax.call(script, parameter, 'true');
    
    
    
    
    }

    Würde das funktionieren?

  • So sieht die Funktion bisher aus (hab sie mal umbenannt ;) )
    Jetzt stellt sich allerdings immer noch die Frage: Wie kriege ich das values-Array in die Parameter? Mit while? Oder kann ich da direkt das Array einbauen und dann per PHP auslesen?
    Das Problem ist ja, das Skript kennt die Anzahl an Parametern und ihre Aufgabe nicht. Aber ich muss ja jedes value einzeln zu einem Parameter formen, den ich dann Ajax mitgeben kann, oder?


    Oder brauche ich diese parameter überhaupt, wenn ich die Daten per $_POST auslese? Die sind ja eher im Stil, wie er von $_GET ausgelesen wird?!

  • So weit stehen die beiden Skripts, die Daten der Formulare auswerten sollen. Ich habe jetzt noch folgendes Problem: Wie werden die Funktionen durch ein Formular angesprochen?
    Vorgaben dabei:
    - Es sollen die Daten sowohl durch JS, als auch direkt durch PHP verarbeitet werden können
    - Wenn die JS-Funktion erfolgreich angesprochen wurde, soll die PHP-Funktion nicht mehr direkt vom Formular geladen werden, sondern per Ajax-JS im Hintergrund
    - Falls JS nicht funktioniert, sollen die Daten direkt an die PHP-Funktion gesendet und von dieser verarbeitet werden
    - Die PHP-Funktion ist dabei jedes Mal eine andere, welche, wird bei Aufruf des Formulars gesendet
    - Es sind verschieden viele Werte, die von den Formularen übermitteltund in das Array value() geschrieben werden, bzw. vom jew. PHP verarbeitet


    Das mit dem PHP direkt ist kein Problem, mein Problem ist das Zwischenschalten des JS, was nicht funktioniert.

  • ne sry mir ist der code zu schwer.
    bin nicht so der pro im objektorientierten programmieren.


    aber ich würde irgentwie um das zu machen bei einer form das so machen.


    irgendeineform.getElementsByTagName('*');
    //dann hat man alle elemente die da drin sind innerhalb dieser form
    //dann nehme ich jedes was einen als atribut name hat und mache daraus dann einen parameterstring
    &name=value
    // oder anstatt value vll auch innerHTML man denke an textarea.

  • Ich denke du musst dein Problem noch ein mal genauer beschreiben.


    Der Hintergrund:
    - Meine Website besteht aus einem statischen Grundgerüst, wo per Ajax der Inhalt eingesetzt wird (zur Vorlage), also auch die Formulare
    - Nun möchte ich es deshalb so gestalten, dass die Formulareingaben aus unterschiedlichen Formularen auch per Ajax im Hintergrund ans PHP gesendet werden, damit auch hier die Seite nicht komplett neu laden muss (zur Vorlage


    Meine Idee:
    - ein einziges Ajax-Skript, welches so konzipiert ist, dass es aus allen Formularen die Daten auslesen kann und sie an das entsprechende PHP Skript weiterleitet
    - Die Möglichkeit, die Daten direkt an das PHP-Skript zu leiten, falls Javascript deaktiviert sein sollte (hab da schon ne Idee)


    Mein Problem:
    - Ich krieg das Ajax-Skript nicht gebacken.
    - Zum einen habe ich keine Idee, wie ich es schaffe, die variable Anzahl an values einzuarbeiten (Array hab ich überlegt, aber wie?)
    - Wie verarbeite ich die Antwort des PHP-Skripts effizent?
    - Wie schaffe ich es, dass eine Meldung ausgegeben wird, wenn es eine gibt und wenn nicht, dann nicht?
    - Wie geht das mit dieser Ladeanzeige, die auftaucht und wieder verschwindet?


    Ich habe zwar schon etwas in die Richtung gefunden (s.oben), aber diese Möglichkeit bräuchte ja eine individuelle Weiterleitung für jedes Formular.
    Meine Idee für diese Skript-Weiche wäre es übrigens, zwei Buttons zu erstellen: einen normalen Submit-Button, in NoScript-Tags, und einen onclick-Button mit display: none, wobei der Stil per JS geändert wird. Hat wer was effizienteres??

  • hää???
    zu den Javascript aktiviert oder deaktiviert.
    mach doch einfach auf die form onsubmit sende ajax und return false (durch das return false wird doch das senden des Formulars abgebrochen und wenn kein JS aktiviert ist wird es auch nicht abgebrochen und normal gesendet).



    bei den Rest vll setzte ich mich mal hin mal schauen um da was zu machen. anscheinend reichen meine hilfen nciht brauchst ne lösung^^

  • JavaScript
    function FormsubmitWithAjax(form){	var xmlhttp = new XMLHttpRequest();	var action = form.getAttribute('action');	var method = form.getAttribute('method').toUpperCase();	var element = form.getElementsByTagName('*');	var parameterString = "";	for(var i = 0; element.lenght > i;i++){		var name = element.getAttribute('name');		var value = '';		if(name){			if(element.getAttribute('value')){				value = element.getAttribute('value');			}else if(element.innerHTML){				value = element.innerHTML;			}			parameterString += encodeURIComponent(name) + '=' + encodeURIComponent(value) + '&';		}	}	if(method == 'GET'){		if(action.indexOf('?') == -1){			action += '?' + parameterString;		}else{			action += '&' + parameterString;		}		parameterString = null;	}else if(method == 'POST'){		parameterString = '?' + parameterString;		xmlhttp.setRequestHeader("Content-type","application/x-www-form-urlencoded");	}	xmlhttp.open(method, action, true);	xmlhttp.onreadystatechange = function() {		if(this.readyState == 4 && this.status == 200) {			alert(this.responseText);		}	}	xmlhttp.send(parameterString);}


    So du darfst jetzt testen dazu habe ich keine lust mehr^^


    so baust du das dann ein z.b.


    HTML
    <form action="eineurl.php" method="post" id="meineform" onsubmit="FormsubmitWithAjax(document.getElementById('meineform')); return false">  First name: <input type="text" name="fname"><br>  Last name: <input type="text" name="lname"><br>  <input type="submit" value="Submit"></form>

  • DANKE!!!!11


    Klappt schon recht gut, ich hab nur eine Frage: nach welchem Schema werden die Variablen benannt, die ans PHP gesendet werden?
    Ich dachte nämlich eigentlich gesehen zu haben, dass sie die Namen aus <input name="" /> tragen sollen. Geht aber nicht.


    HTML
    <form action="scripts/test.php" method="post" id="gruss" onsubmit="FormsubmitWithAjax(document.getElementById('gruss')); return false">
        First name: <input type="text" name="vorname" /><br />
        Last name: <input type="text" name="nachname" /><br />
        <input type="submit" value="Submit" />
    </form>


    PHP
    <?php
    $vorname = $_POST["vorname"];
    $nachname = $_POST["nachname"];
    
    
    
    
    echo "Hallo " . $vorname . " " . $nachname;
    ?>


    Code
    <br />
    <b>Notice</b>:  Undefined index: vorname in <b>C:\xampp\htdocs\SFD-OnePage\public\scripts\test.php</b> on line <b>2</b><br />
    <br />
    <b>Notice</b>:  Undefined index: nachname in <b>C:\xampp\htdocs\SFD-OnePage\public\scripts\test.php</b> on line <b>3</b><br />
    Hallo

    Der Quellcode wird so ausgegeben, ist direkt so sichtbar wie hier. Also, wie werden die Variablen benannt?

  • hm das dachte ich eigentlich auch... komsich??^^


    du kannst ja mal bitte
    alert(parameterString) machen? //diese zeile fügst du am besten in die letzte zeile der FormsubmitWithAjax function ein
    möchte mal sehen was da drin steht



  • so jetzt geht aaallleeesss^^

  • Ich habe jetzt nicht alle Codes von euch studiert aber ich denke du suchst so etwas:




    Bei folgendem Formular:


    Erhalte ich folgende Ausgabe:


    Der Code ist an einigen Stellen ausbaubar, beispielsweise sollte man natürlich je nach erlaubten Eingaben [object] , [/object] , name= und value= entsprechend codieren um in der PHP RegExp korrekte Angaben filtern zu können.


    Es wäre natürlich auch logisch leere Felder trotzdem mit zu versenden um mit PHP Fehler des Benutzers zu analysieren.


    Mit dem Array kannst du dann in Ruhe deine Formulare auswerten, das solltest du zuerst alleine versuchen, wenn du dann Probleme hast deine Auswertung dynamisch zu halten kannst du dich gerne wieder melden, am Besten im PHP-Forenbereich.


    Ich hoffe ich konnte helfen, bei Fragen zum Code nicht scheu sein :love:

  • Auch dir basii vielen Dank für deine Mühe, aber Rolands Skript klappt inzwischen und ist dementsprechend bereits in gebrauch.


    Das werde ich nun auch nicht mehr umbauen, jetzt wo es funktioniert :D

  • so jetzt geht aaallleeesss^^


    Nö, das meiste und bisher alles, was ich brauch, aber;
    Ich hab mal geguckt, was bei anderen außer Text-Inputs passiert. Textarea klappt prima, radiobuttons auch, ABER bei Checkboxen wird nur die letzte und nicht alle Angaben übermittelt.

Jetzt mitmachen!

Sie haben noch kein Benutzerkonto auf unserer Seite? Registrieren Sie sich kostenlos und nehmen Sie an unserer Community teil!