2009-06-03 13 views
0

Ich habe ein Messaging-System erstellt, mit dem Benutzer Nachrichten an einander senden können. Das funktioniert gut, aber wenn sie antworten, möchte ich nicht, dass sie auf eine andere Seite gebracht werden. Ich möchte eine Warnung sagen "gesendet" oder "nicht gesendet". Unten ist mein Code, der nicht funktioniert.Formular mit AJax senden und Ergebnis zurückgeben

in php:

echo"<form id=\"form\" name=\"form\" method=\"post\" onsubmit=\"send(reply)\">"; 

javascript:

function send(reply) 
{ 
    var httpRequest; 
    make_request() 
    function stateck() 
     { 
     if(httpxml.readyState==4) 

     { 

     alert (httpxml.responseText); 

     } 

    httpxml.onreadystatechange=stateck; 
    reply_url="compose.php?reply=" + reply.value + "&msgid="<?php echo $msgid; ?> + "&to="<?php echo $to; ?> + "&subject="<?php echo $subject; ?>"; 
    httpxml.open("GET",reply_url,true); 
    httpxml.send(null); 
    } 
} 

ich php PHP-Variablen verwenden, da diese Daten aus der Datenbank abgerufen werden muss.

Dank

Antwort

2

Sie müssen den Browser sagen, dass Sie das Ereignis selbst Handler in Ihrer anschließend auf falsch behandelt durch Rücksendung:

echo"<form id=\"form\" name=\"form\" method=\"post\" onsubmit=\"send(reply); return false;\">"; 

Auch Ihre Sendefunktion sieht aus wie es einen Fehler erzeugen wird, die die Ursache wird Browser zum Übermitteln. Sie weisen httpxxx nirgendwo zu. Ich nehme an, Sie wollen wirklich:

function send(reply) { 
    var httpxml; 
    httpxml = make_request(); 
    stateck = function() { 
     if(httpxml.readyState==4){ 
      alert (httpxml.status);// you will want to check the server response code too 
      alert (httpxml.responseText);  
     } 

    }; 

    httpxml.onreadystatechange=stateck; 
    reply_url="compose.php?reply=" + reply.value + "&msgid="<?php echo $msgid; ?> + "&to="<?php echo $to; ?> + "&subject="<?php echo $subject; ?>"; 
    httpxml.open("GET",reply_url,true); 
    httpxml.send(null); 
} 
+0

Danke das funktioniert, wenn ich manuell die Antwort_url in die Adressleiste eingeben, funktioniert aber nicht, wenn ich – Elliott

+0

reichen, was ist der Wert der Antwort? sieht so aus, als wäre es undefiniert. – lambacck

+0

Ich bekomme keine Antwort sollte "gesendet" werden – Elliott

2

Es dauerte Sie auf eine andere Seite, da das Formular aufgetreten einreichen. Wenn Sie das Formular stattzufinden nicht wollen, verwenden Sie

onsubmit="send(reply); return false;" 

By the way, können Sie Apostroph verwenden: echo ‚...‘, so dass Sie nicht alle doppelten Anführungszeichen entkommen müssen in der Zeichenfolge.

+0

Dank beziehen, aber ich muss das Formular abzuschicken ... und zurück, was compose.php gesendet – Elliott

+0

Sie AJAX verwenden können um den Inhalt von compose.php zu erhalten, aber Sie möchten nicht, dass das Senden des Formulars stattfindet, das Sie auf eine andere Seite bringt (oder die aktuelle Seite aktualisiert). –

0

Normalerweise, wenn Sie etwas über Ajax zurückkehren möchten möchten Sie eine Seite Vorlage zu vermeiden. Wenn Sie möchten, dass der Benutzer das Gefühl hat, ein Formular zu senden, legen Sie eine normale Schaltfläche (d. H. KEINE Schaltfläche zum Senden) auf der Seite an, die als Ajax-Schaltfläche zum Senden dient. Binden Sie Ihre Ajax-Update-Funktion an den onclick und lassen Sie die PHP-Seite, an die Sie die Anfrage richten, das gewünschte Ergebnis in der Antwort zu senden. Alles andere (den Ergebnistext in Felder einfügen, usw.) sollte nur Standard-Ajax und JavaScript sein.

Verwandte Themen