jimmy_ehardt: Ajax, ASP und die POST-Mehtode

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 klappts 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

--
! mehr licht !
  1. hi,

    Funktioniert mit der "GET"- (und der "HEAD"-)Methode auch problemlos (IE6 und FF1.5), wenns aber die "POST"-Methode sein soll klappts 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

    --
    /voodoo.css:
    #GeorgeWBush { position:absolute; bottom:-6ft; }
    1. Hallo !

      hi,

      Funktioniert mit der "GET"- (und der "HEAD"-)Methode auch problemlos (IE6 und FF1.5), wenns aber die "POST"-Methode sein soll klappts 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

      --

      Sorry, die Problembeschreibung ist wirklich nicht gut.
      Also:
      Ich rufe innerhalb der client.htm mittels Button die Javascript-Function "getDataFromServer" auf, welche mit der xmlhttprequest-Methode "GET" die server.asp aufruft und einen String (Clientdata) an diese übergibt.
      Diese empfängt (analog zu "GET") den String mittels request.querystring und schreibt ihn (Reihenfolge der Buchstaben vertauscht) wieder hin.
      Nun wartet in der Client.htm der Javascript auf den readystate 4 und request.status 200 (bin fertig, alles OK), nimmt den von der asp-Seite geschriebenen String und gibt ihn in einem input-Feld wieder aus. --> funkt
      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.
      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)
      Es findet also kein asynchrones request-response statt.
      Möglicherweise ist es ja die Art wie die Daten an den asp-Skript übergeben werden. Bisher habe ich aber (bei Formularen) die Daten, die mit "POST" übertragen wurden immer mit request.form("Elementname") problemlos erhalten.
      Beim Javascript sind die Unterschiede zur "GET"-Methode, dass Headerdaten abgesendet werden (setRequestHeader) bzw. dem send Daten angefügt werden.
      Soweit ich`s kapiert habe ist das aber auch notwendig (und möglicherweise falsch).
      Das serverseitige Script funktionert, wenn es mit der "GET"-Methode aufegrufen wird, denn es liefert die vorher eingegebene Buchstabenfolge verkehrt in das vorgesehene input-Feld.
      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.
      Hoffe, das erklärt mein Problem etwas besser.
      viele Grüße
      jimmy
      ! mehr licht !
      1. 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

        --
        My sssignature, my preciousssss!
        1. 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

          --
          My sssignature, my preciousssss!
          1. 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 !
            
            1. 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

              --
              My sssignature, my preciousssss!