ajax的HelloWorld会写了,也算是我进门了,慢慢来吧,这次准备写一个tab切换的效果,以前都是页面初次加载,就将所有帧的内容都读出来,然后触发事件,让层显示或者消失就ok。这次想来个ajax版的,也就是页面初次加载只加载第一帧的内容,然后鼠标挪上去切换帧异步读取数据,就这么简单。
程序设计思路:
1,页面初次加载,绑定window.onload事件,异步读取works_0.xml文件中的内容并显示,一帧一个xml文件,帧切换其实就是读取不同的xml文件。
2,鼠标挪上去,触发一个异步请求,读取相应的xml文件
3,解析xml文件内容
4,拼接html字符串
5,使用innerHTML方法显示到指定div中
容易忽略的问题:
1,鼠标挪到当前的标签,就不应该触发请求,应当做个判断
2,每一帧的请求只请求一次,然后将数据保存起来,触发请求前应当判断,如是第一次触发,请求;如是非第一次则不请求,直接将第一次请求保存的结果显示。我是在页面使用了一个hidden,将结果保存到了它的Value值当中,当然也有其他办法,以后再说。
3,加载xml字符串进行处理的时候,IE和FF的方法不一样,应当注意,我在网上搜了一段通用函数用上了^_^
4,好像没有什么了.......
html代码:
view plaincopy to clipboardprint?
<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd">
<html xmlns="http://www.w3.org/1999/xhtml">
<head>
<meta http-equiv="Content-Type" content="text/html" charset="utf-8" />
<meta http-equiv="pragma" content="no-cache">
<title>myTino月度优秀会员作品展示</title>
<link type="text/css" href="css/reset.css" mce_href="css/reset.css" rel="stylesheet" media="all" />
<link type="text/css" href="css/default.css" mce_href="css/default.css" rel="stylesheet" media="all" />
<!--[if IE 7]>
<link type="text/css" href="css/ie7.css" mce_href="css/ie7.css" rel="stylesheet" media="screen" />
<![endif]-->
<!--[if IE 6]>
<link type="text/css" href="css/ie6.css" mce_href="css/ie6.css" rel="stylesheet" media="screen" />
<![endif]-->
<mce:script type="text/javascript" src="js/works.js" mce_src="js/works.js"></mce:script>
<?php include_once("../header_index.php");?>
<div id="wrap">
<div id="header"></div>
<div id="bodyContent">
<div id="tabs" class="clearfix">
<ul>
<li class="curTab" οnmοuseοver="changeTab(this,'works_0');"><h2>最近7天优秀作品</h2& gt;</li>
<li οnmοuseοver="changeTab(this,'works_1');"><h2>本月度优秀作品</h2></li>
<li οnmοuseοver="changeTab(this,'works_2');"><h2>随机推荐作品</h2></li>
</ul>
</div>
<div id="worksContent">
<ul id="works" class="works clearfix">
</ul>
</div>
</div>
<div id="footer"></div>
<?php require_once("../../templates/foot.php")?>
</div>
<input type="hidden" id="works_0" value="" />
<input type="hidden" id="works_1" value="" />
<input type="hidden" id="works_2" value="" />
<?php include_once("../../commonphp/google_analytics.php");?>
</body>
</html>
<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd">
<html xmlns="http://www.w3.org/1999/xhtml">
<head>
<meta http-equiv="Content-Type" content="text/html" charset="utf-8" />
<meta http-equiv="pragma" content="no-cache">
<title>myTino月度优秀会员作品展示</title>
<link type="text/css" href="css/reset.css" mce_href="css/reset.css" rel="stylesheet" media="all" />
<link type="text/css" href="css/default.css" mce_href="css/default.css" rel="stylesheet" media="all" />
<!--[if IE 7]>
<link type="text/css" href="css/ie7.css" mce_href="css/ie7.css" rel="stylesheet" media="screen" />
<![endif]-->
<!--[if IE 6]>
<link type="text/css" href="css/ie6.css" mce_href="css/ie6.css" rel="stylesheet" media="screen" />
<![endif]-->
<mce:script type="text/javascript" src="js/works.js" mce_src="js/works.js"></mce:script>
<?php include_once("../header_index.php");?>
<div id="wrap">
<div id="header"></div>
<div id="bodyContent">
<div id="tabs" class="clearfix">
<ul>
<li class="curTab" οnmοuseοver="changeTab(this,'works_0');"><h2>最近7天优秀作品</h2& gt;</li>
<li οnmοuseοver="changeTab(this,'works_1');"><h2>本月度优秀作品</h2></li>
<li οnmοuseοver="changeTab(this,'works_2');"><h2>随机推荐作品</h2></li>
</ul>
</div>
<div id="worksContent">
<ul id="works" class="works clearfix">
</ul>
</div>
</div>
<div id="footer"></div>
<?php require_once("../../templates/foot.php")?>
</div>
<input type="hidden" id="works_0" value="" />
<input type="hidden" id="works_1" value="" />
<input type="hidden" id="works_2" value="" />
<?php include_once("../../commonphp/google_analytics.php");?>
</body>
</html>
css样式:
view plaincopy to clipboardprint?
/* General */
body {
text-align:center;
background:#F1F1F1;
width:980px;
}
/* layerout*/
#wrap {
width:980px;
margin:10px auto;
text-align:left;
}
#header {
background:url(../images/works_header.gif);
height:180px;
}
#bodyContent {
margin-bottom:10px;
border:solid 1px #ccc;
}
.last {
margin-right:0;
}
/* clear both */
.clearfix {display: inline-block;}
/* Hides from IE-mac /*/
* html .clearfix {height: 1%;}
.clearfix {display: block;}
/* End hide from IE-mac */
.clearfix:after {
content: ".";
display: block;
height: 0;
clear: both;
visibility: hidden
}
/* End layerout*/
/* @navigation */
#tabs {
display:inline-block;
}
#tabs li {
background:url("../images/tab_bg.gif") repeat-x;
float:left;
width:200px;
height:33px;
border-left:solid 1px #fff;
border-right:solid 1px #cecece;
cursor:pointer;
}
#tabs h2 {
height:33px;
line-height:33px;
text-align:center;
}
#tabs .curTab {
background:#ffffff;
border-right:0;
font-weight:bold;
}
/* End navigation */
/* @worksContent */
#worksContent {
padding:15px;
_padding:10px;
background-color:#fff;
}
#works li {
float:left;
width:186px;
height:134px;
margin:5px;
_margin:4px;
padding:20px;
background:url("../images/work_bg.gif");
}
#worksContent .works {
}
/* End worksContent */
/* General */
body {
text-align:center;
background:#F1F1F1;
width:980px;
}
/* layerout*/
#wrap {
width:980px;
margin:10px auto;
text-align:left;
}
#header {
background:url(../images/works_header.gif);
height:180px;
}
#bodyContent {
margin-bottom:10px;
border:solid 1px #ccc;
}
.last {
margin-right:0;
}
/* clear both */
.clearfix {display: inline-block;}
/* Hides from IE-mac /*/
* html .clearfix {height: 1%;}
.clearfix {display: block;}
/* End hide from IE-mac */
.clearfix:after {
content: ".";
display: block;
height: 0;
clear: both;
visibility: hidden
}
/* End layerout*/
/* @navigation */
#tabs {
display:inline-block;
}
#tabs li {
background:url("../images/tab_bg.gif") repeat-x;
float:left;
width:200px;
height:33px;
border-left:solid 1px #fff;
border-right:solid 1px #cecece;
cursor:pointer;
}
#tabs h2 {
height:33px;
line-height:33px;
text-align:center;
}
#tabs .curTab {
background:#ffffff;
border-right:0;
font-weight:bold;
}
/* End navigation */
/* @worksContent */
#worksContent {
padding:15px;
_padding:10px;
background-color:#fff;
}
#works li {
float:left;
width:186px;
height:134px;
margin:5px;
_margin:4px;
padding:20px;
background:url("../images/work_bg.gif");
}
#worksContent .works {
}
/* End worksContent */
js代码:
view plaincopy to clipboardprint?
/**
* @author liuyong
*/
var xmlHttp;
var xmlDoc;
var works_0 ='';
var works_1 ='';
var works_2 =''; //标志变量,存储第一次请求拼好的content_str
var divId = '';
function loadXmlStr(strxml){ //兼容IE和FF的加载xml字符串的通用函数
try{
xmlDoc = new ActiveXObject("Microsoft.XMLDOM");
xmlDoc.loadXML(strxml);
}
catch(e){
var oParser=new DOMParser();
xmlDoc=oParser.parseFromString(strxml,"text/xml");
}
return xmlDoc;
}
function createXMLHttpRequest(){
if(window.ActiveXObject){ /*在IE下初始化XMLHttpRequest对象 */
try{
xmlHttp = new ActiveXObject("Microsoft.XMLHTTP"); //新版本IE
}catch(otherMicrosoft){
try{
//较老版本的 Internet Explorer
xmlHttp= new ActiveXObject("Microsoft.XMLHTTP");
}catch(failed){
// 还是失败,那么就认为创建失败……
xmlHttp= false;
}
}
}else if(window.XMLHttpRequest){
xmlHttp = new XMLHttpRequest();
}
if(!xmlHttp){
alert("创建 XMLHttpRequest 对象失败!");
}
}
function startRequest(fileName){
divId = fileName;
createXMLHttpRequest();
try{
if(document.getElementById(fileName).value == '' ){
xmlHttp.onreadystatechange = handleStateChange;
xmlHttp.open("GET", "data/" + fileName + ".xml", true);
xmlHttp.send(null);
}else{
document.getElementById("works").innerHTML = document.getElementById(fileName).value;
}
}catch(exception){
alert("您要访问的资源不存在!");
}
}
function handleStateChange(){
if(xmlHttp.readyState == 4){
if (xmlHttp.status == 200 || xmlHttp.status == 0){
// 取得XML的DOM对象
//alert(xmlHttp.responseText);
xmlDoc = loadXmlStr(xmlHttp.responseText);
// 取得XML文档的根
var root = xmlDoc.documentElement;
try
{
// 取得<works>结果
var works = root.getElementsByTagName('work');
//alert(works.length);
var userid;
var foldID;
var workid;
var content_str = ''; //拼好的HTML字符串
for(i = 0;i<works.length;i++){
userid = works[i].getElementsByTagName("userid")[0].firstChild.nodeValue;
foldID = works[i].getElementsByTagName("foldID")[0].firstChild.nodeValue;
workid = works[i].getElementsByTagName("workid")[0].firstChild.nodeValue;
content_str = content_str + '<li><a href="/" mce_href="/""http://www.mytino.com/cn/profile/profile_works_detail.php?workid=' + workid + '&foldID=' + foldID + '&type=2&userid=' + userid + '/" target=/"_blank/"><img src="/" mce_src="/""images/'+workid+'.jpg/" alt=/"/" /></a></li>';
}
document.getElementById("works").innerHTML = content_str;
document.getElementById(divId).value = content_str;
divId = '';
}catch(exception)
{
alert("异常情况!");
}
}
}else{
document.getElementById("works").innerHTML = '<img src="/" mce_src="/""images/loading.gif/" />';
}
}
function changeText(str,element){
if(navigator.appName.indexOf("Explorer") > -1){
document.getElementById(element).innerText = str;
}else{
document.getElementById(element).textContent = str;
}
}
var arr_li;
function changeTab(arg,con){
arr_li = document.getElementById("tabs").getElementsByTagName("li");
for(var i = 0;i<arr_li.length;i++){
arr_li[i].className = 'none';
}
arg.className = 'curTab';
if(arg.className == 'curTab'){
if (con == 'works_0') {
startRequest('works_0');
}else if(con == 'works_1'){
startRequest('works_1');
}else if(con == 'works_2'){
startRequest('works_2');
}
}
}
window.onload = function(){
startRequest('works_0');
}
/**
* @author liuyong
*/
var xmlHttp;
var xmlDoc;
var works_0 ='';
var works_1 ='';
var works_2 =''; //标志变量,存储第一次请求拼好的content_str
var divId = '';
function loadXmlStr(strxml){ //兼容IE和FF的加载xml字符串的通用函数
try{
xmlDoc = new ActiveXObject("Microsoft.XMLDOM");
xmlDoc.loadXML(strxml);
}
catch(e){
var oParser=new DOMParser();
xmlDoc=oParser.parseFromString(strxml,"text/xml");
}
return xmlDoc;
}
function createXMLHttpRequest(){
if(window.ActiveXObject){ /*在IE下初始化XMLHttpRequest对象 */
try{
xmlHttp = new ActiveXObject("Microsoft.XMLHTTP"); //新版本IE
}catch(otherMicrosoft){
try{
//较老版本的 Internet Explorer
xmlHttp= new ActiveXObject("Microsoft.XMLHTTP");
}catch(failed){
// 还是失败,那么就认为创建失败……
xmlHttp= false;
}
}
}else if(window.XMLHttpRequest){
xmlHttp = new XMLHttpRequest();
}
if(!xmlHttp){
alert("创建 XMLHttpRequest 对象失败!");
}
}
function startRequest(fileName){
divId = fileName;
createXMLHttpRequest();
try{
if(document.getElementById(fileName).value == '' ){
xmlHttp.onreadystatechange = handleStateChange;
xmlHttp.open("GET", "data/" + fileName + ".xml", true);
xmlHttp.send(null);
}else{
document.getElementById("works").innerHTML = document.getElementById(fileName).value;
}
}catch(exception){
alert("您要访问的资源不存在!");
}
}
function handleStateChange(){
if(xmlHttp.readyState == 4){
if (xmlHttp.status == 200 || xmlHttp.status == 0){
// 取得XML的DOM对象
//alert(xmlHttp.responseText);
xmlDoc = loadXmlStr(xmlHttp.responseText);
// 取得XML文档的根
var root = xmlDoc.documentElement;
try
{
// 取得<works>结果
var works = root.getElementsByTagName('work');
//alert(works.length);
var userid;
var foldID;
var workid;
var content_str = ''; //拼好的HTML字符串
for(i = 0;i<works.length;i++){
userid = works[i].getElementsByTagName("userid")[0].firstChild.nodeValue;
foldID = works[i].getElementsByTagName("foldID")[0].firstChild.nodeValue;
workid = works[i].getElementsByTagName("workid")[0].firstChild.nodeValue;
content_str = content_str + '<li><a href="/" mce_href="/""http://www.mytino.com/cn/profile/profile_works_detail.php?workid=' + workid + '&foldID=' + foldID + '&type=2&userid=' + userid + '/" target=/"_blank/"><img src="/" mce_src="/""images/'+workid+'.jpg/" alt=/"/" /></a></li>';
}
document.getElementById("works").innerHTML = content_str;
document.getElementById(divId).value = content_str;
divId = '';
}catch(exception)
{
alert("异常情况!");
}
}
}else{
document.getElementById("works").innerHTML = '<img src="/" mce_src="/""images/loading.gif/" />';
}
}
function changeText(str,element){
if(navigator.appName.indexOf("Explorer") > -1){
document.getElementById(element).innerText = str;
}else{
document.getElementById(element).textContent = str;
}
}
var arr_li;
function changeTab(arg,con){
arr_li = document.getElementById("tabs").getElementsByTagName("li");
for(var i = 0;i<arr_li.length;i++){
arr_li[i].className = 'none';
}
arg.className = 'curTab';
if(arg.className == 'curTab'){
if (con == 'works_0') {
startRequest('works_0');
}else if(con == 'works_1'){
startRequest('works_1');
}else if(con == 'works_2'){
startRequest('works_2');
}
}
}
window.onload = function(){
startRequest('works_0');
}
xml文件:
works_0.xml
<?xml version="1.0" encoding="utf-8"?>
<root>
<work>
<userid>97026</userid>
<foldID>3893</foldID>
<workid>8379</workid>
</work>
<work>
<userid>97026</userid>
<foldID>3893</foldID>
<workid>8378</workid>
</work>
<work>
<userid>97026</userid>
<foldID>3893</foldID>
<workid>8374</workid>
</work>
<work>
<userid>97026</userid>
<foldID>3893</foldID>
<workid>8369</workid>
</work>
<work>
<userid>358611</userid>
<foldID>14049</foldID>
<workid>33964</workid>
</work>
<work>
<userid>358611</userid>
<foldID>14046</foldID>
<workid>33960</workid>
</work>
<work>
<userid>358611</userid>
<foldID>14046</foldID>
<workid>33959</workid>
</work>
<work>
<userid>358542</userid>
<foldID>14033</foldID>
<workid>33951</workid>
</work>
</root>
works_1.xml
<?xml version="1.0" encoding="utf-8"?>
<root>
<work>
<userid>358457</userid>
<foldID>14027</foldID>
<workid>33946</workid>
</work>
<work>
<userid>358413</userid>
<foldID>14025</foldID>
<workid>33936</workid>
</work>
<work>
<userid>358413</userid>
<foldID>14025</foldID>
<workid>33935</workid>
</work>
<work>
<userid>358413</userid>
<foldID>14025</foldID>
<workid>33934</workid>
</work>
<work>
<userid>358458</userid>
<foldID>14024</foldID>
<workid>33931</workid>
</work>
<work>
<userid>233263</userid>
<foldID>8049</foldID>
<workid>33927</workid>
</work>
<work>
<userid>162003</userid>
<foldID>14016</foldID>
<workid>33925</workid>
</work>
<work>
<userid>162003</userid>
<foldID>14015</foldID>
<workid>33919</workid>
</work>
</root>
works_2.xml
<?xml version="1.0" encoding="utf-8"?>
<root>
<work>
<userid>358818</userid>
<foldID>14082</foldID>
<workid>34050</workid>
</work>
<work>
<userid>358818</userid>
<foldID>14082</foldID>
<workid>34045</workid>
</work>
<work>
<userid>196211</userid>
<foldID>5503</foldID>
<workid>11983</workid>
</work>
<work>
<userid>92431</userid>
<foldID>13756</foldID>
<workid>33296</workid>
</work>
<work>
<userid>358704</userid>
<foldID>14089</foldID>
<workid>34060</workid>
</work>
<work>
<userid>359066</userid>
<foldID>14094</foldID>
<workid>34070</workid>
</work>
<work>
<userid>358656</userid>
<foldID>14061</foldID>
<workid>33998</workid>
</work>
<work>
<userid>359206</userid>
<foldID>14104</foldID>
<workid>34089</workid>
</work>
</root>
本文来自CSDN博客,转载请标明出处:http://blog.csdn.net/liuyong0818/archive/2009/04/21/4098062.aspx