Avatar billede ajaxnoob Nybegynder
25. oktober 2008 - 19:06 Der er 8 kommentarer og
1 løsning

AJAX document.getElementById problemer

Hej, jeg er ved at lave en chatbox der bruger ajax til at auto refresh en DIV med "chat". Dette virker fint.

Mit problem er når jeg prøver at få value fra et textfield med.

Jeg har prøvet en masse og har fundet ud af at getElementsByTagName på et textfield ikke er muligt. Det jeg skal bruge er document.getElementById, men jeg kan ikke få det til at virke.

chat.php
<?php
$userid = "1";
$projectid = "22";

    $ChatForm =     '<script language="JavaScript" type="text/javascript" src="chat.js"></script>
                      <div id="chatarea" name="chatarea">
                    noget her måske
                    </div>
                    <div id="chattexter">
                    <form id="chat" name="chatbox" method="POST" onsubmit="saveData(); return false;">
                    <p>Name:<br /><input name="chatName" type="text" />
                    <br />UserID:<br /><input name="chatUserid" value="'.$userid.'" type="text" />
                    <br />ProjectID:<br /><input name="chatProjectid" id="chatProjectid" value="'.$projectid.'" type="text" />
                    <br />Comment:<br /><input name="chatMsg" type="text" />
                    <input type="submit" name="submit" value="submit" /></p>
                    </form>
                    </div>';
echo $ChatForm;
?>

chatout.php
<?php
    header("Cache-Control: no-store, no-cache, must-revalidate");

    echo "1: <br/>";   
    print_r($_GET['id']);
    echo "<br/>";
    echo "2: <br/>";
    $projectid = $_GET['id'];
    echo $projectid;
    echo "<br/>";
    echo "3: <br/>";
    echo "VIRK!";
?>

chat.js
function ajaxFunction()
{
    var ajaxRequest;

    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)
            {
                //browsers all not support, rare case
                alert("Your browser broke!");
                return false;
            }
        }

    }

    return ajaxRequest;
}

function showData()
{
    var projectid;
    htmlRequest = ajaxFunction();
    if (htmlRequest==null)
    {
        alert ("Browser does not support HTTP Request");
        return;
    }

    htmlRequest.onreadystatechange = function()
    {
        if(htmlRequest.readyState == 4)
        {
            document.getElementById("chatarea").innerHTML = htmlRequest.responseText;
        }
    }

    projectid = document.getElementsByTagName("chatProjectid");
    //projectid = document.getElementById("chatProjectid");
   
    htmlRequest.open("GET", "chatout.php?id="+projectid.value, true);

    htmlRequest.send(null);
}

showData();
setInterval("showData()",2000);



DIV chatarea bliver fyldt med chatout.phps indhold. Problemet er bare at jeg kun får undefined over.

Hvad gør jeg forkert?
Har brugt alt for mange timer på det og må sige at jeg er ved at blive lidt skør.
Avatar billede majbom Novice
25. oktober 2008 - 19:36 #1
projectid = document.getElementsByTagName("chatProjectid");
//projectid = document.getElementById("chatProjectid");

bruge getElementById i stedet for elementsByTagName, da du ikke har nogle tags på din side der hedder chatProjectid
Avatar billede olebole Juniormester
25. oktober 2008 - 19:48 #2
<ole>

Elementet eksisterer vel ikke, når du forsøger at kalde det. Prøv:

window.onload = function(){
    showData();
    setInterval("showData()",2000);
}

/mvh
</bole>
Avatar billede olebole Juniormester
25. oktober 2008 - 19:56 #3
Derudover kan jeg anbefale en bedre opdateret XMLHttpRequest wrapper:
    http://www.dengodekode.dk/artikler/ajax/xmlhttprequest_wrapper.php

- og så burde du nok bruge DOM til at indsætte data i HTML-dokumentet. Dels har innerHTML en hel del bagdele - dels har den aldrig været valid i nogen standard - dels kræver det mange gange flere server resourcer at HTML-formatere data, end det gør at JSON- eller XML-formatere de samme data.

Jeg har vist et par små JSON-eksempler i denne tråd:
    http://www.eksperten.dk/spm/817625
Avatar billede ajaxnoob Nybegynder
25. oktober 2008 - 20:01 #4
Tak splazz og olebole. Bruge getelementbyid og window.onload og det virker nu. Jeg er ikke en person der hurtigt spørge om hjælp, har brugt 5 timer på dette lille problem og har lært en hel del nyt, bare ikke det jeg skulle bruge, før nu.

olebole, tak for links, dem læser jeg med det samme. Jeg er ret nyt til javascript/ajax, så alt hjælper.

Igen, mange tak for hjælpen begge.
Avatar billede majbom Novice
25. oktober 2008 - 20:06 #5
selv tak :0)
Avatar billede majbom Novice
25. oktober 2008 - 20:29 #6
skulle ole ikke have haft nogle af de points?
Avatar billede ajaxnoob Nybegynder
25. oktober 2008 - 20:34 #7
Jo, undskyld ole. Dette er min første post på siden, troede jeg kunne give jer begge 60 point.
Avatar billede majbom Novice
25. oktober 2008 - 20:50 #8
hvis du mener vi skal have 0 hver, kan du oprette et spørgsmål, der hedder "point til olebole" og lade ole svare på det, og på den måde give ham 0 point også...

hvis du mener at vi skal dele de 60 du gav mig, opretter jeg bare et spørgsmål og giver ole 30 point :)
Avatar billede olebole Juniormester
26. oktober 2008 - 11:55 #9
Ellers tak, jeg har rigeligt  ;o)

Det er ikke altid lige let at havne i et nyt forum med et hav af skrevne og uskrevne regler, så der var engang en bruger, der lavede denne lille 'tutorial' til E: http://expfaq.dk/

Velkommen til ... jeg håber, du får glæde af stedet  ;o)
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