Ajax and XML
Download
Report
Transcript Ajax and XML
Ajax with XML
26-Jul-16
Displaying theAjax response
Here is the previous code for dealing with a non-XML
response:
function alertContents(http_request) {
if (http_request.readyState == 4) {
if (http_request.status == 200) {
alert(http_request.responseText);
} else {
alert('There was a problem with the request.');
}
}
}
Doing it with XML
Here’s an XML file named test.xml:
<?xml version="1.0" ?>
<root> I'm a test. </root>
function alertContents(http_request) {
if (http_request.readyState == 4) {
if (http_request.status == 200) {
var xmldoc = http_request.responseXML;
var root_node =
xmldoc.getElementsByTagName('root').item(0);
alert(root_node.firstChild.data);
} else {
alert('There was a problem with the request.');
}
}
}
responseText and responseXML
The Content-Type in the header tells the type of server
response
For non-XML, you can use text/html or text/plain
For sending XML, it's better to use text/xml
When the server sends text/xml, the browser parses it,
creates an XML DOM tree, and places this tree in the
responseXML object
The XML is also available in the responseText object, but it
you use this you will have to parse it yourself
HTML DOM vs. XML DOM
The DOM for the web page represents HTML
The DOM for the XML represents the server's response
They have the same methods!
Sending XML to the server
The server is really good at handling name-value pairs
If you want to send XML...
It pretty much has to be sent as POST
XML gets long very quickly
All those special characters need to be URL-encoded
You have to
setRequestHeader("Content-Type", "text/xml")
The server doesn't have DOM trees--you will have to parse
the XML yourself
Bottom line: Sending XML to the server is too much
work!
XML notes
The XML response object supports very complete
XML DOM processing
The response header must include:
Content-Type: text/xml
or IE will throw an “Object expected” JavaScript error
Cache-Control: no-cache
or the response will be cached and the request will never be
resubmitted
For some browsers you may need to do
request.overrideMimeType('text/xml');
In Firefox, this will give an error if the response isn’t valid
XML
The End