Ajax, ASP und die POST-Mehtode
jimmy_ehardt
- asp.net
Hallo !
Ich bin neu im Forum (obwohl schon Langzeitkonsument desselbigen) und muss mich nach erfolglosen Suche per Google und MSDN nun an Euch wenden.
Problem:
Ich versuche mit einer html-Seite per xmlhttprequest Daten von einem asp-Skript zu erhalten.
Funktioniert mit der "GET"- (und der "HEAD"-)Methode auch problemlos (IE6 und FF1.5), wenns aber die "POST"-Methode sein soll klappt
s nicht !
Ich denke mal, ich poste den gesamten Code der client.htm und des server_post.asp (welche nur den übergebenen String umdreht).
-- client.htm --
<html>
<head>
<script type="text/javascript" language="javascript">
function NewRemoteRequest()
{
try {
request = new XMLHttpRequest();
} catch (trymicrosoft) {
try {
request = new ActiveXObject("Msxml2.XMLHTTP");
} catch (othermicrosoft) {
try {
request = new ActiveXObject("Microsoft.XMLHTTP");
} catch (failed) {
request = false;
}
}
}
if (!request)
{alert("Error initializing XMLHttpRequest!");}
}
function getDataFromServer()
{
var clientData=document.getElementById("sndtxt").value;
var url="server.asp?CLIENTSTRING="+clientData;
request.open("GET",url,true);
request.onreadystatechange=postData;
request.send(null);
}
function getDataFromServerHead()
{
var url="server_post.asp"
request.open("HEAD",url,true);
request.onreadystatechange=postData;
request.send();
}
function getDataFromServerPost()
{
var clientData=document.getElementById("sndtxt").value;
request.open("POST","server_post.asp",true);
request.setRequestHeader('Content-Type', 'application/x-www-form-urlencoded');
request.send('clientdata='+clientData);
request.onreadystatchange=postServerPost;
}
function postServerPost()
{
if (request.readyState == 4)
{
if (request.status == 200)
{
document.getElementById("sndtxt").value=request.responseText;
}
}
}
function postData()
{
if (request.readyState == 4)
{
if (request.status == 200)
{
//document.getElementById("sndtxt").value=request.responseText;
document.getElementById("sndtxt").value=request.getAllResponseHeaders();
}
else
{
document.getElementById("sndstat").value="still working";
}
}
}
</script>
</head>
<body onload="NewRemoteRequest();">
<input type="text" id="sndtxt">
<input type="button" value="GO" onclick="getDataFromServer();">
<p>
<input type="text" id="sndstat">
</p>
<p>
<form name="testform" method="post" action="server.asp">
<input type="text" name="sndfrm">
<input type="submit" onclick="getDataFromServerPost();">
</form>
<p>
<input type="button" value="ASAS" onclick="getDataFromServerHead();">
</p>
</body>
</html>
-- server_post.asp --
<%
dim clientdata
clientdata=request.form("sndfrm")
response.write strReverse(clientdata)
%>
Über einen helfenden response auf einen fragenden request würde ich mich sehr freuen !
lg
jimmy
hi,
Funktioniert mit der "GET"- (und der "HEAD"-)Methode auch problemlos (IE6 und FF1.5), wenn
s aber die "POST"-Methode sein soll klappt
s nicht !
"Klappt nicht" ist immer noch keine Problembeschreibung.
Wie hast du kontrolliert, ob dein serverseitiges Script aufgerufen wird?
Wo ist die Testausgabe, welche Daten bei diesem angekommen sind?
gruß,
wahsaga
Hallo !
hi,
Funktioniert mit der "GET"- (und der "HEAD"-)Methode auch problemlos (IE6 und FF1.5), wenn
s aber die "POST"-Methode sein soll klappt
s nicht !"Klappt nicht" ist immer noch keine Problembeschreibung.
Wie hast du kontrolliert, ob dein serverseitiges Script aufgerufen wird?
Wo ist die Testausgabe, welche Daten bei diesem angekommen sind?gruß,
wahsaga
Moin!
Es wäre schlau gewesen, deinen Postingtext nicht hinter der Abtrennung für Signaturen zu platzieren! Dann hätte man dir ganz einfach antworten können.
Versuche ich den xmlhttprequest innerhalb der Form-Tags mit der Methode "POST" aufzurufen, wird die server_post.asp aufgerufen und gibt ebenfalls die Buchstabenfolge verkehrt wieder aus.
Was bedeutet das? Rufst du server_post.asp über ein reguläres POST-Formular auf? Und alles funktioniert?
Aber anstatt den String zurückzugeben und ihn mittels Javascript wieder in ein input-Feld zu schreiben wird im Browserfenster immer die server_post.asp angezeigt. (So als würde man den Skript mit dem Submit-Button aufrufen)
Klingt so, als würde der Quelltest der ASP-Datei ausgegeben werden - das wäre dann ein serverseitiges Problem.
Auch kommen die Daten beim server_post-Skript an, da es ja den String richtig ausgibt, jedoch werden die Daten nicht an die aufrufende Client.htm gesendet, sondern nur das serverseitige Skript im Browser dargestellt.
Reste von einem Link? Von einem Submit?
Hoffe, das erklärt mein Problem etwas besser.
Nein, aber bevor du nochmal eine riesige Signatur postest, rate ich lieber mal.
- Sven Rautenberg
Moin!
Auch kommen die Daten beim server_post-Skript an, da es ja den String richtig ausgibt, jedoch werden die Daten nicht an die aufrufende Client.htm gesendet, sondern nur das serverseitige Skript im Browser dargestellt.
Reste von einem Link? Von einem Submit?
Keine Reste, das ist absichtlich:
So sieht dein HTML-Teil aus, der den POST-Teil abschicken soll.
<form name="testform" method="post" action="server.asp">
<input type="text" name="sndfrm">
<input type="submit" onclick="getDataFromServerPost();">
</form>
Dreimal darfst du raten, was passiert, wenn du den Submit-Button drückst. Richtig, das Formular wird abgeschickt, und zwar vollkommen ohne AJAX.
Dass AJAX nebenbei läuft, wird durch das Laden des Formularergebnisses aufgehoben.
- Sven Rautenberg
Hallo !
Moin!
Auch kommen die Daten beim server_post-Skript an, da es ja den String richtig ausgibt, jedoch werden die Daten nicht an die aufrufende Client.htm gesendet, sondern nur das serverseitige Skript im Browser dargestellt.
Reste von einem Link? Von einem Submit?
Keine Reste, das ist absichtlich:
So sieht dein HTML-Teil aus, der den POST-Teil abschicken soll.
<form name="testform" method="post" action="server.asp">
<input type="text" name="sndfrm">
<input type="submit" onclick="getDataFromServerPost();">
</form>
>
> Dreimal darfst du raten, was passiert, wenn du den Submit-Button drückst. Richtig, das Formular wird abgeschickt, und zwar vollkommen ohne AJAX.
>
> Dass AJAX nebenbei läuft, wird durch das Laden des Formularergebnisses aufgehoben.
>
> - Sven Rautenberg
Hallo !
Erstmal Dank für Deine Antworten.
ad Text unter der Signatur: Das war natürlich keine Absicht - Sorry
Ich müsste auch keine drei mal raten um herauszufinden, dass der submit-button das Formular abschickt.
Nur stammt die Idee nicht von mir, sondern ist von einem Referenz-Code, den ich bei den diversen Suchen gefunden habe.
Falls Du noch immer bereit bist zu antworten und Dir die Mühe machen willst, hier die Seite : http://www.yourhtmlsource.com/examples/ajaxformsubmission.html
und hier die Seite mit den zugehörigen Tutorial:
http://www.yourhtmlsource.com/javascript/ajax.html
Im serverseitigen PHP-Code wird die übergebene Variable mit $\_POST empfangen. Soweit ich weiss handelt es sich dabei um ein Array, das mit der POST-Methode übergeben wird.
Vielleicht macht ja das den Unterschied aus...?
gruss
jimmy
--
! mehr licht !
Moin!
Falls Du noch immer bereit bist zu antworten und Dir die Mühe machen willst, hier die Seite : http://www.yourhtmlsource.com/examples/ajaxformsubmission.html
Die Sache ist simpel: In dieser Seite wird jedem Form mit Javascript ein onsubmit-Event drangehängt, welches das reguläre Abschicken des Formulars verhindert und komplett mit AJAX realisiert.
Mit anderen Worten: Das FORM ist komplett überflüssig.
und hier die Seite mit den zugehörigen Tutorial:
http://www.yourhtmlsource.com/javascript/ajax.html
Das wird in der Seite übrigens auch deutlich erklärt.
- Sven Rautenberg