user389006
user389006

Reputation: 155

javascript xmlhttprequest won't work

I'm learning javascript for a new project. I have seen many tutorials about javascript and xmlhttprequest, but when I try to run decode it won't work. can somebody help me.

here is my html+javascript code:

<!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" />
 <title>xml reader</title>
</head>

<body>
<script type="text/javascript">
    var xmlhttp;
    var xmldoc;
    if(window.XMLHttpRequest){
        xmlhttp = new XMLHttpRequest();
    }else
    {// code for IE6, IE5
    xmlhttp=new ActiveXObject("Microsoft.XMLHTTP");
    }
    xmlhttp.onreadystatechange=stateChange();
    xmlhttp.open("GET","info.xml",true);
    xmlhttp.send(null);
    xmldoc = xmlhttp.responceXML.documentElement;
    document.write(xmlhttp.getElementsByTagName("vakken")[0].childNodes[0].nodeValue);
</script>
</body>
</html>

here is my xml file:

<?xml version="1.0" encoding="utf-8"?>
<info>
        <name>test</name>
        <nummber>10</nummber>
</info>

Upvotes: 0

Views: 818

Answers (4)

Fidi
Fidi

Reputation: 5834

Are you don't receiving an answer in the Request or may it be the case, that you get an answer but it's not written into your dom? Lately I had the problem, that document.write wouldn't work in one of my pages. I found out, that document.write is not allowed in XHTML-based pages (My page was XHTML 1.1, yours is XHTML 1.0). So this is just a guess. You could test this with the firebug-extension for firefox. Althought all common browsers respect, that document.write is not allowed and throw a error-message, IE does however support document.write in any case...

Upvotes: 1

Dror
Dror

Reputation: 7305

stateChange() that you call onreadystatechange is not defined - add a function named stateChange that will be called once the response returns.

An example of such a function:

function stateChange() {
    if(xmlhttp.readyState == 4){
        xmldoc = xmlhttp.responseXML.documentElement;
        document.write(xmlhttp.getElementsByTagName("vakken")[0].childNodes[0].nodeValue);
    }
}

You must remember that AJAX is asynchronous - the response must be handled separately at the time it returns - hence the readystatechanged event usage...
Remove the two lines after sending the request from your original code (they are in the stateChange function).

Upvotes: 1

Daniel
Daniel

Reputation: 890

You have a ReferenceError in your JavaScript that prevents it from executing completely. "stateChange" is undefined. You need to define the stateChange function.

Also it looks like "response" is spelled wrong (responce).

Please go through this tutorial from W3Schools: http://www.w3schools.com/XML/xml_http.asp

You're very close so use W3Schools as a resource to fix up some other problems in your code.

Upvotes: 1

Patrick Boos
Patrick Boos

Reputation: 7029

maybe you should use xmlhttp.onreadystatechange and set it to a real function. the function stateChange() does not exist in the above example.

a good working example that does almost the same thing as you do is here: http://www.w3schools.com/ajax/tryit.asp?filename=tryajax_first

Upvotes: 1

Related Questions