[Ajax] Formular und Post

Hallo !

Ich habe hier ein Problem und komme irgendwie mit den Beschreibungen die ich gefunden habe nicht klar. Liegt eventuell an der Uhrzeit.

Ich habe ein Formular (grob) :

HTML:
<form name="support" method="post">
   <input type="text" name="name">
   <input type="text" name="mail"> 
   <a href="javascript:sentRequest('support.php')">Ticket erstellen</a>
</form>

Nun habe ich per Ajax folgendes erstellt

Code:
function sentRequest(url){
    if (window.XMLHttpRequest) {
        request = new XMLHttpRequest(); // Mozilla, Safari, Opera
    } else if (window.ActiveXObject) {
        try {
            request = new ActiveXObject('Msxml2.XMLHTTP'); // IE 5
        } catch (e) {
            try {
                request = new ActiveXObject('Microsoft.XMLHTTP'); // IE 6
            } catch (e) {}
        }
    }
    if (!request) {
        alert("Kann keine XMLHTTP-Instanz erzeugen");
        return false;
    } 
  else {
        request.open('POST', url, true);
        request.send(null);
        request.onreadystatechange = interpretRequest;
    }
}

So, in meiner support.php kommen in $_POST keine Daten an.Was mache ich falsch X(
 
Nur Vermutungen:

Code:
request.send(null);
Wenn du nichts sendest kommt auch support.php nichts an, oder?

Was theoretisch auch sein könnte daß am Pfad zur support.php was nicht stimmt und deine Daten ins Nirvana geschickt werden.
 
Hi !

Pfad zur support.php passt.Die Daten werden in eine DB geschrieben.Einträge sind vorhanden nur die Daten aus dem Formular kommen nicht an. Hier sind die DB Felder leer.

Ich komme irgendwie gerade nicht weiter ...
 
Liest Du die Antworten? Wenn ja, dann sollte Dir aufgefallen sein, dass odigo Dich darauf hingewiesen hat, dass Du keine Daten an die send()-Methode übergibst. Wie soll den im Request was sein, wenn Du keine Daten sendest.
 
Hallo !

Natürlich lese ich die Antworten, ich suche/brauche ja Hilfe :)

Die Datei support.php ist korrekt. Ich habe diese mal mit $_GET aufgerufen und die Daten werden korrekt abgespeichert.

HTML:
<form name="ticketSystem">
<input type="text" name="subject">
<input type="text" name="message">
<a href="javascript:sentRequest('support/ticket.php');">Ticket erstellen</a>
</form>

So sieht grob das HTML File aus.

Ich habe das JS mal bearbeitet :

HTML:
function sentRequest(url){
  request = getAjaxReqObject();
    if (!request) {
        alert("Kann keine XMLHTTP-Instanz erzeugen");
        return false;
    } 
  else {
        request.open('GET', url, true);
        request.send("subject=subject&message=message");
    }

Ich habe mal im send die Parameter per Hand eingegeben.Die Daten werden aber nicht eingetragen in die DB.

Ich komme irgendwie nicht weiter.
 
Oh uh ah, mein Fehler. Ich hab schon sehr lange keinen Async-Request mit einem XMLHttpRequest-Object abgesetzt.

Du musst natürlich die Daten an deine URL hängen.

Code:
xmlHttp.open('GET', url?key=value&key2=value2, true);
xmlHttp.send(null);
xmlHttp.onreadystatechange = responseHandler;

Sorry, nochmal für den kleinen Fehler aber ich benutze nur noch prototype dafür.
 
WOW :)

Mit Prototype ist es echt total easy. Habe mir gerade den Code auf der Seite angeschaut und klappt ohne Probleme.

Eine Frage hätte ich noch :

HTML:
<form id="create-support-ticket" method="POST" action="support/createTicket.php">

Die Daten landen nun einwandfrei in der DB.Jedoch sehe ich dann die createTicket.php Seite X(

Ich würde gerne wieder die support.php Seite anzeigen. Ich lade die per Ajax in ein div.Hierfür nutze ich die Funktion

HTML:
load('support.php');

Ich habe es nun wie folgt versucht

HTML:
$('create-support-ticket').request({
   onComplete: function(){
        load('support.php');
   }
})

Jedoch ohne Effekt ...
 
Hallo !

Load ist meine eigene Funktion.Ich habe mir die selber mit Ajax gebaut.

Muss es dann wie folgt lauten

HTML:
<!-- Formular -->
$('create-support-ticket').request();
$('#supportContent').load('support/support.php');
 
Ich zeig Dir mal schnell wie ich solche Ajax-Requests mit Prototype abschicke.

HTML:
<form onsubmit="return false;" action="deine_seite.php" method="post" id="deine_form_id">
<!--
Deine Input-Felder usw.
-->

<input type="submit" name="save" id="save" />
</form>

<script type="text/javascript" language="javascript">

$('save').observe('click', saveData);

    function saveData(event) {
        new Ajax.Request('deine_seite.php',
        {
            method: 'get',
            parameters: $('deine_form_id').serialize(),
            onSuccess: handleResponse
        });
    }

    function handleResponse(response) {
        if (!response.responseText.isJSON()) {
            $('updateErrors').innerHTML = "";
            $('updateErrors').innerHTML = "<p class='success'>"+response.responseText+"</p>";
            $('updateErrors').style.display = "block";
            return;
        }

        var data = response.responseText.evalJSON();

        var error = "<p class='error'>";

        if (typeof(data) == 'object') {
            for (var item in data) {
                error += data[item] + "<br />";
            }
        } else {
            for (var i = 0; i < data.length; i++) {
                error += data[i] + "<br />";
            }
        }
        error += "</p>";
        $('updateErrors').innerHTML = error;
        $('updateErrors').style.display = "block";
    }
</script>

Das schöne daran, Du musst nicht die ganzen Daten manuell angeben, sondern serialisierst das ganze mit $('deine_form_id').serialize(). Somit kannste Deine Form, ohne dass Du die JS-Funktionen erweitern musst, um weitere Felder erweitern.

Die handleResponse-Methode dient bei mir dazu, Meldungen über den Status auszugeben, das können Error-,Warning-& Success-Messages sein.

Serverseitig darfst Du natürlich nur das zurück geben was Du ausgeben willst.
 
Langsam ist es mir echt zu blöd X(

Wenn ich deinen Code nehme, passiert nichts.

Mit

HTML:
$('create-support-ticket').request();

Klappt es, ich bin dann aber auf der ticket.php Seite.Einfach ein


HTML:
$('create-support-ticket').request();

Und dann in dem div, wo sich das formular befindet was anderes hinein laden.

Bin kurz davor ein

PHP:
header("location: support.php")

zu nehmen ...
 
Nur nicht verzweifeln.

Dein Code:

1) Ajax-Request wird abgeschickt?
2) Hast Du ein return; nach dem speichern der Daten drin?
3) Könntest Du mal ein bisschen mehr Code zeigen?

Mein Code:
1) Hast Du den Code angepasst, dass er für Dich passt?
2) Welche Fehlermeldung kommt? (Mal mit Firebug schauen)
3) Was macht er bei meinem Code nicht/wie weit kommt er?
 
Zurück
Oben