Mit Javascript PHP-Datei aufrufen und ausgeben

Hallo Leute,
ich brauche Hilfe.
Ich suche schon seit Tagen an einem Problem und bekomme es einfach nicht hin.
Ich habe eine einfache HTML-Datei mit formular. Jetzt will ich die im Formular eingegebenen Daten per Javascript an eine PHP-Datei übermitteln, und die Antwort ausgeben.
Das komische: Wenn ich das Formular mit Submit oder Enter absende, kommt keine Ausgabe, wenn ich ins Textfeld etwas Eingebe und dann auf einen Link klicke, der die selbe Javascript-Funktion aufruft, funktioniert es wie gewünscht.
Hier die Dateien:

index.html

[code]

Formular absenden [/code]

exec.js

function send() { var post = "exec=" + document.Formular.Eingabe.value; var req; try { req = window.XMLHttpRequest?new XMLHttpRequest(): new ActiveXObject("Microsoft.XMLHTTP"); } catch(e) {} req.onreadystatechange = function() { if ((req.readyState == 4) && (req.status == 200)) { var response = req.responseText; document.body.innerHTML = response + document.body.innerHTML; } }; req.open('POST', 'exec.php', true); req.setRequestHeader('Content-Type', 'application/x-www-form-urlencoded'); req.setRequestHeader("Connection", "close"); req.send(post); }

exec.php

<?php print_r($_POST); echo '<br><br>'; ?>

Was kann da das Problem sein?
Ich kenne mich leider nicht sehr mit Javascript aus.
Vielen Dank schon mal
LG johamin

Das ganze js-Zeug ist doch komplett überflüssig, weil das
Formular einfach ohne abgeschickt wird. Insbesondere
wenn es sowie mit PHP ausgewertet wird, kann man das
auswertende PHP-Skript doch gleich im Attribut action angeben
und man ist fertig.
Das vermeidet auch Probleme, wenn die Interpretation von
js beim Anwender gar nicht aktiviert oder verfügbar ist.

Zudem ist ‘javascript:send();’ kein sinnvoller Inhalt für das
href-Attribut, da gehört eine gültige URI oder ein
Fragmentidentifizierer rein.

Ich möchte aber nicht, dass sich die komplette Seite neu läd, sondern dass im Hintergrund eine Anfrage ausgeführt wird und das Ergebnis dann in das bestehende HTML-Dokument eingefügt wird.
LG johamin

Wenn in dem Feld nichts steht, ist in $_POST auch nichts, was ausgegeben werden könnte.

Versuch’s mal so:

req.send("value="post);

[quote=“zvn”]Wenn in dem Feld nichts steht, ist in $_POST auch nichts, was ausgegeben werden könnte.
[/quote]

Die Variable “post” wird oben definiert mit dem Inhalt aus dem Eingabefeld.

Das funktioniert ja auch, aber eben nur wenn man auf den Link klickt und nicht wenn man Enter drückt oder auf Absenden klickt
LG johamin

Das ist ja die Grundidee eines (X)HTML-Formulars, daß man es
losschickt, damit es ausgewertet wird.
Ist auch kaum zu verhindern, daß ein Nutzer das abschickt,
hier also dann eben an die aktuelle Seite, die dann den Kram
selbst verarbeiten sollte.

Das angedeutete Vorhaben zielt in Richtung AJAX, sofern dabei
aber der Inhalt des Dokumentes geändert werden soll, ist das
sicher die falsche Methode, weil das auch nur bestenfalls
funktioniert, wenn java-script interpretiert wird.

Aber es muss doch eine Möglichkeit geben, dass man ein Formular mit Enter/Submit im Hintergrund an eine PHP-Datei übermittelt und das Ergebnis in das HTML-Dokument einfügt. Und auch so, das die Seite sich nicht neu läd.
LG johamin

Vermutlich schon (kann man als ergonomischere Alternative
zu dem anbieten, wo sie das ohne java-script eben immer neu
läd). Da muß man dann eben per java-script das klassische
Abschicken des Formulares abfangen und eine entsprechende
Anfrage im AJAX-Stil machen (gibt es zweifellos auch Anleitungen
dazu, wie man das am besten macht). Da ich aus Gründen der
Barrierefreiheit gar kein java-script verwende, bin ich da aber
sicher nicht der Experte - und kann da nur das Stichwort zum
Suchen liefern.

(X)HTML selbst sieht das nicht vor (allenfalls im frameset kann
man dann nur jeweils einen frame aktualisieren lassen, nicht
das gesamte set). Das liegt an den genannten
Zugänglichkeitsproblemen, weswegen per Definition das der
Inhalt der Seite ist, was ohne java-script zugänglich ist, da kann
man also auch formal keinen Inhalt dynamisch aktualisieren,
allenfalls anders darstellen.
Mit AJAX kann man formal technisch auch Inhalte nachladen.
Im Sinne von (X)HTML kann das aber nur dann relevanter Inhalt
sein, wenn der auch in der nackten Fassung ohne Skript
zugänglich ist ;o) Daß das zutrifft, muß wiederum der Autor
gewährleisten, diese AJAX-Methode kümmert sich da nicht drum.
Insofern hat der Autor also doppelte Arbeit, wenn er das wirklich
anbieten will.

Danke, ich habe es jetzt gelöst.
Ich habe im form-tag ein onsubmit eingefügt, wo erst die Funktion send() aufgerufen wird und dann das eigentliche Absenden des Formulars gestoppt wird.

Jetzt läuft es wie gewünscht.
@hoffmann: Ich benutze eigentlich auch nicht gerne clientseitige Sprachen, aber hier war es nicht anders möglich.

:wink:
LG johamin