站内搜索: 请输入搜索关键词

当前页面: 开发资料首页Javascript 专题使用 JavaScript 实现 XMLHttpRequest,在IE,FireFox 上测试通过!

使用 JavaScript 实现 XMLHttpRequest,在IE,FireFox 上测试通过!

摘要: 使用 JavaScript 实现 XMLHttpRequest,在IE,FireFox 上测试通过!
<textarea readonly style="border:none;font-family:Courier New;line-height:150%;width:760px;overflow-y:visible">

XMLHttp 方式实现无刷屏,在IE,FireFox 上测试通过

html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN"
"http://www.w3.org/tr/xhtml1/DTD/xhtml1-transitional.dtd">

<head>

<script type="text/javascript">
// global flag
var isIE = false;

// global request and XML document objects
var req;

// retrieve XML document (reusable generic function);
// parameter is URL string (relative or complete) to
// an .xml file whose Content-Type is a valid XML
// type, such as text/xml; XML source must be from
// same domain as HTML file
function loadXMLDoc(url) {
// branch for native XMLHttpRequest object
if (window.XMLHttpRequest) {
req = new XMLHttpRequest();
req.onreadystatechange = processReqChange;
req.open("GET", url, true);
req.send(null);
// branch for IE/Windows ActiveX version
} else if (window.ActiveXObject) {
isIE = true;
req = new ActiveXObject("Microsoft.XMLHTTP");
if (req) {
req.onreadystatechange = processReqChange;
req.open("GET", url, true);
req.send();
}
}
}

// handle onreadystatechange event of req object
function processReqChange() {
// only if req shows "loaded"
if (req.readyState == 4) {
// only if "OK"
if (req.status == 200) {
clearTopicList();
buildTopicList();
} else {
alert("There was a problem retrieving the XML data:\n" +
req.statusText);
}
}
}

// invoked by "Category" select element change;
// loads chosen XML document, clears Topics select
// element, loads new items into Topics select element
function loadDoc(evt) {
// equalize W3C/IE event models to get event object
evt = (evt) ? evt : ((window.event) ? window.event : null);
if (evt) {
// equalize W3C/IE models to get event target reference
var elem = (evt.target) ? evt.target : ((evt.srcElement) ? evt.srcElement : null);
if (elem) {
try {
if (elem.selectedIndex > 0) {
loadXMLDoc(elem.options[elem.selectedIndex].value);
}
}
catch(e) {
var msg = (typeof e == "string") ? e : ((e.message) ? e.message : "Unknown Error");
alert("Unable to get XML data:\n" + msg);
return;
}
}
}
}

// retrieve text of an XML document element, including
// elements using namespaces
function getElementTextNS(prefix, local, parentElem, index) {
var result = "";
if (prefix && isIE) {
// IE/Windows way of handling namespaces
result = parentElem.getElementsByTagName(prefix + ":" + local)[index];
} else {
// the namespace versions of this method
// (getElementsByTagNameNS()) operate
// differently in Safari and Mozilla, but both
// return value with just local name, provided
// there aren't conflicts with non-namespace element
// names
result = parentElem.getElementsByTagName(local)[index];
}
if (result) {
// get text, accounting for possible
// whitespace (carriage return) text nodes
if (result.childNodes.length > 1) {
return result.childNodes[1].nodeValue;
} else {
return result.firstChild.nodeValue;
}
} else {
return "n/a";
}
}

// empty Topics select list content
function clearTopicList() {
var select = document.getElementById("topics");
while (select.length > 0) {
select.remove(0);
}
}

// add item to select element the less
// elegant, but compatible way.
function appendToSelect(select, value, content) {
var opt;
opt = document.createElement("option");
opt.value = value;
opt.appendChild(content);
select.appendChild(opt);
}

// fill Topics select list with items from
// the current XML document
function buildTopicList() {
var select = document.getElementById("topics");
var items = req.responseXML.getElementsByTagName("item");
// loop through elements, and add each nested
// element to Topics select element<br/> for (var i = 0; i < items.length; i++) {<br/> appendToSelect(select, i,<br/> document.createTextNode(getElementTextNS("", "title", items[i], 0)));<br/> }<br/> // clear detail display<br/> document.getElementById("details").innerHTML = "";<br/>}</p><p>// display details retrieved from XML document<br/>function showDetail(evt) {<br/> evt = (evt) ? evt : ((window.event) ? window.event : null);<br/> var item, content, div;<br/> if (evt) {<br/> var select = (evt.target) ? evt.target : ((evt.srcElement) ? evt.srcElement : null);<br/> if (select && select.options.length > 1) {<br/> // copy <content:encoded> element text for<br/> // the selected item<br/> item = req.responseXML.getElementsByTagName("item")[select.value];<br/> content = getElementTextNS("content", "encoded", item, 0);<br/> div = document.getElementById("details");<br/> div.innerHTML = "";<br/> // blast new HTML content into "details" <div><br/> div.innerHTML = content;<br/> }<br/> }<br/>}<br/></script><br/></head><br/><body><br/><h1>XMLHttpRequest Object Demo</h1><br/><hr /> </p><p><form><br/><p>Category:<br /><br/><select onchange="loadDoc(event)"><br/> <option value="">Choose One</option><br/> <option value="songs.xml">Top 10 Songs</option><br/> <option value="albums.xml">Top 10 Albums</option><br/> <option value="newreleases.xml">Top 10 New Releases</option><br/> <option value="justadded.xml">Top 10 Just Added</option><br/></select><br/></p><br/><p>Items:<br /><br/><select size="10" id="topics" onchange="showDetail(event)"><br/> <option value="">Choose a Category First</option><br/></select><br/></p><br/></form><br/><div id="details"><span></span></div><br/></body><br/><html></p></span> <br /> <div style="font-size: 14px; line-height: 25px;"><strong></strong> </textarea> <br> <a href="/javascript/index.html">↑返回目录</a> <BR> 前一篇: <a href='/javascript/1/5621.html'>JavaScript 中的replace方法 </a> <br> 后一篇: <a href='/javascript/1/5623.html'>Javascript模板技术 </a> </div> <!-- end: 正文 --> <!-- #EndEditable --> <!-- begin: footer --> <div id=footer><center> <a href="http://www.javanb.com/index.html">首页</a> | <a href="http://www.javanb.com/java-sitemap-bd.html">全站 Sitemap</a> | <a href="http://www.javanb.com/contact.html">联系我们</a> | <a href="#" onclick="this.style.behavior='url(#default#homepage)';this.setHomePage('http://www.javanb.com/');return(false);">设为首页</a> | <a href="#" onclick="window.external.AddFavorite('http://www.javanb.com/', 'Java 编程资料牛鼻站');return false;">收藏本站</a> <br>版权所有 Copyright © 2006-2007, Java 编程资料牛鼻站, All rights reserved <br>   </center></div> <!-- end: footer --> </div> </body><!-- #EndTemplate --></html>