Avatar billede mediman Nybegynder
11. januar 2010 - 12:17 Der er 7 kommentarer og
1 løsning

Validere ord på server

Jeg forsøger at lære noget AJAX og prøver nu at få sendt et enkelt ord til serveren for at kunnne validere på det. Men det virker ikke, og jeg har brug for din hjælp.

her er skriptet:

<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
<html xmlns="http://www.w3.org/1999/xhtml">
<head>
<meta http-equiv="Content-Type" content="text/html; charset=utf-8" />
</head>

<body>

<script language="javascript" type="text/javascript">
<!--
// Get the HTTP Object
function getHTTPObject(){
    if (window.ActiveXObject) return new ActiveXObject("Microsoft.XMLHTTP");
    else if (window.XMLHttpRequest) return new XMLHttpRequest();
    else {
        alert("Your browser does not support AJAX.");
        return null;
    }
}

// Change the value of the outputText field
function setOutput(){
    if(httpObject.readyState == 4){
        document.getElementById('outputText').value = httpObject.responseText;
    }
}

function doWork(){
    httpObject = getHTTPObject();
    if (httpObject != null) {
        httpObject.open("POST", "testord.php?inputText="
        +document.getElementById('inputText').value, true);
        httpObject.send(null);
        httpObject.onreadystatechange = setOutput;
    }
}

var httpObject = null;
//-->
</script>

<form name="testForm" id="guess" onSubmit="doWork();" method="post">
    <input id="focus" type="text" name="inputText" size="22"><br>
    <input type="submit" value="Send">
    <input type="reset" value="Reset">
</form>

<div id="outputText">Tekst : </div>

</body>
</html>

------- end script -------

og her er testord.php

<?php
    if (isset($_POST['inputText']))
    echo strtoupper($_POST['inputText']);
?>

------- end script -------
Avatar billede majbom Novice
11. januar 2010 - 12:32 #1
er ret sikker på at objektet httpObjekt ikke er tilgængeligt andre steder end den funktion hvor det bliver oprettet

du opretter det i doWork og prøver at tilgå den i setOutput - du er nok nødt til at sende state med til setOutput, eller noget i den retning
Avatar billede intenz Novice
11. januar 2010 - 13:49 #2
Du har i hvert fald en fejl her:
        httpObject.open("POST", "testord.php?inputText="
        +document.getElementById('inputText').value, true);

Du bruger getElementById('inputText') og dit input felt ser sådan ud:
<input id="focus" type="text" name="inputText" size="22">

Altså det hedder name="inputText". Derfor får du en fejl.
Avatar billede mediman Nybegynder
11. januar 2010 - 14:11 #3
Ok, jeg har rettet Id til inputText (hvor blind man dog kan være) men det giver det samme resultat.

Mht. at sende state med til setOutput - det lyder meget logisk, men jeg er helt blank med hvordan jeg skal gøre det.

Måske er der en meget smartere metode til at sende et ord til validering på serveren end mit ubehjælpsomme script...?
Avatar billede Cyrilion Nybegynder
11. januar 2010 - 14:22 #4
Hmm.. ud over det intenz nævnte, ligner det at du submitter formen ligemeget hvad der sker i dit AJAX-kald. Du refresher essensielt siden og al javascript du måtte kalde ender med at leve en tilværelse på en side, der ikke længere bliver vist ;)

Noget a la dette for i det mindste at komme videre:

function doWork(){
    httpObject = getHTTPObject();
    if (httpObject != null) {
        httpObject.open("POST", "testord.php?inputText="
        +document.getElementById('inputText').value, true);
        httpObject.send(null);
        httpObject.onreadystatechange = setOutput;
    }
    return false;
}

<form name="testForm" id="guess" onSubmit="return doWork();" method="post">

Den lette måde at sende data til validering på serveren er at ignorere AJAX helt og validere dels client-side og server-side ;)

Har du overhovedet behov for at have serveren til at validere data før det bliver submittet til serveren?
Avatar billede mediman Nybegynder
11. januar 2010 - 15:24 #5
Nej, det handler naturligvis om at sende noget til serveren til validering, og så returnere noget afhængigt af udfaldet. Jeg er nødt til at gøre det serverside da det skal valideres op imod en database.

Problemet er, at jeg er vant til html/css og php, men ikke forstår javascript - og jeg vil gerne kunne validere brugerinput serverside uden at skulle reloade hele siden.

Ser lige på dit forslag, foreløbig mange tak.
Avatar billede tjens Nybegynder
11. januar 2010 - 15:49 #6
Her er et eksempel hvor inputfelter sendes via ajax.

http://tjens.dk/eksperten/php/AjaxPostForm890356.php
(højreklik og se koden)

PHP-filen er bare et eksempel, for at bevise at data har været via serveren, og ser således ud:
<?php
header ("content-type: text/xml");

echo "<reply>";
echo 'You typed ' . $_POST["firstname"] . ' ' . $_POST['lastname'] . ' as name' ;
echo "</reply>";

?>


Jeg har ikke nærstuderet din kode, men det ser ud som om du sender variablen via GET metoden samtidig med at du skriver POST.
Avatar billede mediman Nybegynder
11. januar 2010 - 16:01 #7
Bingo, der var den :-)

Tak til alle og points til tjens, poster du lige et svar?
Avatar billede tjens Nybegynder
11. januar 2010 - 16:14 #8
Var det POST/GET sammenblandingen, der var problemet?
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

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