Avatar billede j1x4r4 Nybegynder
09. februar 2007 - 14:51 Der er 6 kommentarer og
1 løsning

AJAX og post

Hejsa, jeg er igang med et script til en AJAX/PHP drevet chat, det skal bruges til et afsluttende projekt i skolen..

Jeg har tænkt mig at bruge AJAX til at poste en brugers indlæg til chatten, således at man ikke skal reloade hver gang :)

function send_msg()
{
    var time = timestamp + "-" + day + "-" + month + "-" + year;
    var random_post = randomnum;
    var message = document.message.besked.value;
    var reciewer = document.message.whisper.value;
    var sender = document.message.user_ident.value;
    var show_page = document.message.show.value;
    var type = "insert_msg";
    var url = "chat.php";
   
    request_msg.open("POST", url, true);
   
    request_msg.onreadystatechange = svar_msg;
   
request_msg.setRequestHeader("Content-Type","application/x-www-form-urlencoded; charset=UTF-8");
           
    request_msg.send(type);
    request_msg.send(random_post);
    request_msg.send(time);
    request_msg.send(message);
    request_msg.send(reciewer);
    request_msg.send(sender);
    request_msg.send(show_page);
}
       
function svar_msg()
{
    if(request_msg.readyState == 4)
    {
        if(request_msg.status == 200)
        {
        document.getElementById('just_wrote').innerHTML = request_msg.responseText;
            alert("OK!");
        }else{
            alert("Fejl: " + request_msg.statusText);
        }
    }
}

Problemet er at serveren ikke modtager svaret.. Jeg har testet at alle variablerne rent faktisk har en værdi. så det eneste sted jeg kan se at problemet skulle være er i kommunikationen mellem mit script og serveren.

Mit php script ser lige nu sådan ud:

$type = $_POST['type'];

if($type == "insert_msg")
{
    echo "post msg: " . $_POST['message'];
}

Jeg tror måske jeg har misforstået noget om hvordan man poster noget til PHP :-)
Avatar billede olebole Juniormester
09. februar 2007 - 15:15 #1
<ole>

Du har nok generelt misforstået AJAX - og det er der ikke noget at sige til. Desværre er der rigtig mange tutorial-forfattere, der ikke selv har forstået AJAX ... og i øvrigt koder elendigt!  :)

Hele idéen med at bruge AJAX er, at man kun udveksler rå data mellem server og klient. Når data returneres, sker det i XML- eller JSON-format, men _aldrig_ HTML-formateret - og man indsætter _aldrig_ kode med innerHTML, men med DOM.
innerHTML-property'en har aldrig været valid (og bliver det heller aldrig) ... under XHTML er den tilmed komplet ubrugelig.

Desuden fatter jeg ikke din send-blok. Du skal sende en query-streng som argument ... altså noget à la:

    request_msg.open("POST", url, true);
    request_msg.onreadystatechange = svar_msg;
    request_msg.setRequestHeader("Content-Type","application/x-www-form-urlencoded; charset=UTF-8");
    request_msg.send("bla=bla_value&blabla=blabla_value");

- hvorved du sender de to variabler 'bla' og 'blabla' til serveren med method="post"

/mvh
</bole>
Avatar billede j1x4r4 Nybegynder
09. februar 2007 - 15:25 #2
Det med InnerHTML er der kun lige nu for at jeg kan se hvad jeg evt har skrevet, ligesom alert() også kun er der for at vise at selve posten var succesfuld.. :)

Jeg skal vist have kigget lidt nærmere på den måde ajax modtager data siger du, men hvor vil du så anbefale at man kigger henne af? :) (Jeg bruger det returnerede data lidt nogle andre steder med nogle boolske værdier)

request_msg.send("bla=bla_value&blabla=blabla_value");

Ovenstående giver lidt mere mening for mig, det ligner jo en GET :D
Avatar billede j1x4r4 Nybegynder
09. februar 2007 - 15:29 #3
Er dette mere korrekt at sende med?

var query = "type=" + type + "&session_id=" + sessid + time_url + "&message" + message + "&reciewer" + reciewer + "&sender" + sender + "&show" + show_page;
           
            request_msg.send(query);
Avatar billede j1x4r4 Nybegynder
09. februar 2007 - 15:30 #4
Bortset fra de manglende lighedstegn osv self.. Men altså, er det sådan cirka det skal se ud? :)
Avatar billede olebole Juniormester
09. februar 2007 - 15:35 #5
Ja, det ser korrekt ud  ;o)

Prøv evt. starte her:
    http://developer.mozilla.org/en/docs/AJAX
Avatar billede j1x4r4 Nybegynder
09. februar 2007 - 15:38 #6
Smider du ikke lige et svar så jeg kan belønne din indsats? ;)
Avatar billede olebole Juniormester
09. februar 2007 - 15:40 #7
Gerne, tak  =)
Avatar billede Ny bruger Nybegynder

Din løsning...

Tilladte BB-code-tags: [b]fed[/b] [i]kursiv[/i] [u]understreget[/u] Web- og emailadresser omdannes automatisk til links. Der sættes "nofollow" på alle links.

Loading billede Opret Preview
Kategori
Vi tilbyder markedets bedste kurser inden for webudvikling

Log ind eller opret profil

Hov!

For at kunne deltage på Computerworld Eksperten skal du være logget ind.

Det er heldigvis nemt at oprette en bruger: Det tager to minutter og du kan vælge at bruge enten e-mail, Facebook eller Google som login.

Du kan også logge ind via nedenstående tjenester