Avatar billede gbjensen65 Nybegynder
12. juli 2009 - 20:40 Der er 7 kommentarer og
1 løsning

Validering af form med AJAX input

Hej,

Hvordan kan jeg i et javascript validere et AJAX svar ?

Jeg har en formular hvor jeg checker de fleste felter med alm. javascript, det virker fint, men det ene felt checker jeg med et AJAX kald, da der skal et opslag i databasen for at godkende feltet. I browser vinduet skrives via ajaxDisplay.innerHTML at indholdet er "Ok." eller "Fejl"

Her kommer ajax funktionen (virker fint):

function ajaxFunction(){
    var ajaxRequest;  // The variable that makes Ajax possible!
   
    try{
        // Opera 8.0+, Firefox, Safari
        ajaxRequest = new XMLHttpRequest();
    } catch (e){
        // Internet Explorer Browsers
        try{
            ajaxRequest = new ActiveXObject("Msxml2.XMLHTTP");
        } catch (e) {
            try{
                ajaxRequest = new ActiveXObject("Microsoft.XMLHTTP");
            } catch (e){
                // Something went wrong
                alert("Your browser broke!");
                return false;
            }
        }
    }
    // Create a function that will receive data sent from the server
    ajaxRequest.onreadystatechange = function(){
        if(ajaxRequest.readyState == 4){
            var ajaxDisplay = document.getElementById('ajaxDiv');
            ajaxDisplay.innerHTML = ajaxRequest.responseText;
        }
    }
    var brewid = document.getElementById('brewid').value;
    var beername = document.getElementById('beername').value;
    var queryString = "?brewid=" + brewid + "&beername=" + beername;
    ajaxRequest.open("GET", "/ajax/beerok.php" + queryString, true);
    ajaxRequest.send(null);
}

Når jeg så vil checke 'ajaxDiv', er feltet tomt / undefined.

function formValidatorB(){
    var beerok= document.getElementById('ajaxDiv');
    if(isBeerOk(beerok,"Øllen er allerede oprettet")){
    return true;

      }
        return false;
     
}

function isBeerOk(elem, helperMsg){
    if(elem.value=="Ok."){
        return true;
    }
    else{
        alert(elem.value);
        return false;
    }
}
functionen herover fejler, elem.value er "undefined"

Er der nogen der har en god ide ?
Avatar billede tjens Nybegynder
12. juli 2009 - 20:59 #1
Min første indskydelse er, at en DIV generelt ikke har en .value
Avatar billede fbhzone Nybegynder
12. juli 2009 - 21:36 #2
Hvad smider du efter funktionen i "elem"?

Kan du evt. linke til siden hvor du bruger det.
Avatar billede gbjensen65 Nybegynder
13. juli 2009 - 10:10 #3
formValidatorB bliver kaldt fra en html formular, noget af formulaen kan ses her:

<form action="/beers2.php?m=add" onsubmit="return formValidatorB();" method="POST">
<p>
Skriv info om &Oslash;l / v&aelig;lg op til 4 billeder:<br>
Felter med * skal udfyldes!</p>       
    <table width="100%" border="0">
      <tr>
        <td>Bryggeri: </td>
        <td colspan="2"><select name="brewid" id="brewid" size = "1">
            <option selected value="615">Burton Bridge Brewery</option> </select>
    </td>
        <td width="55%"><a href="/beers2.php? m=add&amp;brewid=615">V&aelig;lg et andet bryggeri</a></td>
      </tr>
      <tr>
        <td width="17%"><p>Navn p&aring; &Oslash;l: *<br>
          </p></td>
        <td><input name="beername" id="beername" onkeyup='ajaxFunction()' type="text" value="">
</td><td id='ajaxDiv'></td><td>

Navnet checkes med "ajaxFunction()" og resultatet vises i kolonnen efter. Det er denne 'ajaxDiv' jeg gerne vil checke med formValidatorB (jeg har af hensyn til overskueligheden, slettet nogle if'er fra formValidatorB)

Jeg kan pt ikke vise et link, da der kræves et login for at komme til denne formular, men det vil jeg ændre senere i dag.
Avatar billede gbjensen65 Nybegynder
13. juli 2009 - 17:21 #4
Avatar billede tjens Nybegynder
14. juli 2009 - 13:05 #5
En TD har heller ikke en .value

Lav linie
    ajaxDisplay.innerHTML = ajaxRequest.responseText;
om til
    while( ajaxDisplay.hasChildNodes() )
      { ajaxDisplay.removeChild( ajaxDisplay.lastChild ); }
    ajaxDisplay.appendChild(document.createTextNode( ajaxRequest.responseText );

Lav funktion

function isBeerOk(elem, helperMsg){
    if(elem.value=="Ok."){
        return true;
    }
    else{
        alert(elem.value);
        return false;
    }
}

om til

function isBeerOk(elem, helperMsg){
    var elmvalue = elem.firstChild.nodeValue;
    if(elmvalue=="Ok."){
        return true;
    }
    else{
        alert(elmvalue);
        return false;
    }
}
Avatar billede gbjensen65 Nybegynder
14. juli 2009 - 17:46 #6
Hej tjens,

Det virker efter at jeg fik indsat en enkelt lille ) efter ajaxDisplay.appendChild(document.createTextNode( ajaxRequest.responseText )

Af en eller anden grund så kan der ikke længere passere æøå fra mit php script der udfører kontrollen i databasen og ajax ?
Enten så kommer der et ? hvis jeg skriver f.eks. ø skriver jeg &oslash; så kommer det ud på skærmen. Men pyt, jeg har fundet på en anden tekst. det vigtigste, at det kontrolleres i javascriptet det virker fint.

Nu har jeg ikke benyttet eksperten.dk så længe, så hvordan får jeg emnet her lukket og tildelt dig de points du fortjener ?

Jeg indrømmer gerne at jeg er nybegynder inden for javascripts, derfor er det super at kunne spørge eksperterne. Har for selv at lære mere lige bestilt en bog fra SitePoint om emnet: "The Art & Science Of JavaScript"
Avatar billede tjens Nybegynder
14. juli 2009 - 22:12 #7
Dette indlæg har status svar: Så kan du markere det og acceptere svar og give point.
Avatar billede olebole Juniormester
17. juli 2009 - 13:24 #8
<ole>

Problemerne med æ, ø og å skyldes, at du benytter flere forskellige tegnsæt i én og samme applikation. Hvis du bruger samme tegnsæt i alle led, er der ikke problemer med specialtegn og Ajax

/mvh
</bole>
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