学习坊广告 网站建设咨询电话0711-3202220 、 QQ:215665888        将学习坊设为主页     广告赞助QQ:410899793     主页申请

实现基于Ajax的无限级菜单

来源:网络 【www.cn0711.net】   作者:未知【学习坊转】 [字体: ]
 

框架特点:

支持form的无闪提交(方法有点笨)

支持mvc框架,即支持传统页架构

多线程并发请求(要语言支持线程)

动态加载文件,只加载有用的!处理了ajax框架臃肿的js文件问题。

采用no table的全div + css布局

a. 获得xmlhttprequest对象,上到处都找得到了,不多说:

function newxmlhttprequest() {

var xmlreq = false;

if (window.xmlhttprequest) {

xmlreq = new xmlhttprequest();

} else if (window.activexobject) {

try {

xmlreq = new activexobject("msxml2.xmlhttp");

} catch (e1) {

try {

xmlreq = new activexobject("microsoft.xmlhttp");

} catch (e2) {

}

}

}

return xmlreq;

}

这里提供一个通用的支持多浏览器的方法。

b.提出异步请求

//这里用bcandy作为方法名是为了感谢一个对我来说很重要的人,她一直在支持我

function bcandy(tid,url,parm,js) {

if(url == ""){

return;

}

//这是一个加载信息提示框,也可以不要!

document.getelementbyid("load").style.visibilITy = "visible";

//加载相应页面的js文件

if(js != null){

//加载js文件

loadjs(js);

}

// 获取一个xmlhttprequest实例

var req = newxmlhttprequest();

// 设置用来从请求对象接收回调通知的句柄函数

var handlerfunction = getreadystatehandler(req,tid);

req.onreadystatechange = handlerfunction;

// 第三个参数表示请求是异步的

req.open("post", url, true);

// 指示请求体包含form数据

req.setrequestheader("content-type",

"application/x-www-form-urlencoded");

// 发送参数

req.send(parm);

}

function getreadystatehandler(req,tid) {

// 返回一个监听xmlhttprequest实例的匿名函数

return function () {

// 如果请求的状态是“完成”

if (req.readystate == 4) {

// 成功接收了服务器响应

if (req.status == 200) {

//下面一句是重点,这里显示了返回信息的内容部分,也可以加以修改。进行其它处理

document.getelementbyid(tid).innerhtml = req.responsetext;

document.getelementbyid(tid).style.visibilITy = "visible";

//这一句是实现加载信息提示框的隐藏,也可以不要。

document.getelementbyid("load").style.visibilITy = "hidden";

} else {

// 有http问题发生

document.getelementbyid("load").style.visibilITy = "hidden";

alert("http error: "+req.status);

}

}

}

}

//动态加载js文件

function loadjs(file){

var head = document.getelementsbytagname('head').ITem(0);

var script = document.createelement('script');

script.src = file;

script.type = "text/javascript";

head.appendchild(script);

}

这就是基本的框架了,因为使用了request.responsetext;所以,可以直接请求一个页面jsp,servlet但在使用struts框架的请求时要进行特殊处理,因为form不支持异步请求。建议在这些页面上不要加入标签,就像.net里的asxm文件!而且在使用struts框架时有点要注意的是,mapping对象直接返回null就可以了,因为我们会在下面讲到并发多线程。来处理这个问题的。

总的来看,有点像是积木搭建起来的。这样方便文件的修改和扩展,互相之间并不影响,而且,实现了代码和标签分离。在进行传统页面改版时,也不用重新编写全部代码。只要修改一小部分就可以完美实现ajax带来的无闪刷新快感。

以上代码均在ie,firefox测试过。




 

录入:学习坊

查看对 实现基于Ajax的无限级菜单 的评论 【 发表见解 】 【 查看见解 】 【 打印资料 】  
上一篇:ASP.NET 2.0实现AJAX的Web开发
下一篇:AJAX实例入门
百度中>“实现基于Ajax的无限级菜单”相关内容 google中>“实现基于Ajax的无限级菜单”相关内容
雅虎中>“实现基于Ajax的无限级菜单”相关内容 搜狗中>“实现基于Ajax的无限级菜单”相关内容
中搜中>“实现基于Ajax的无限级菜单”相关内容 爱问中>“实现基于Ajax的无限级菜单”相关内容