开发基于Ajax的web应用需要编写大量的Javascript代码,而就目前的情况而言,Javescript的调试还缺少一个比较好的集成环境。为了减轻Ajax开发的复杂度,可以使用一些已有的Ajax开发框架,既提高了开发效率,也减少了代码出错的概率。现在市面上已经有很多框架可用,但如果只是开发比较小的项目,完全可以自己编写一个简单的框架,这样效率可能会更高。
下面我将通过对XMLHttpRequest对象的封装,创建一个简单的Ajax框架。
首先,需要创建一个XMLHttpRequest对象实例。
function
AjaxFrameDemo()
{
this
.XmlHttp
=
this
.CreatHttpObject();
}
AjaxFrameDemo.prototype.CreatHttpObject
=
function
()
{
var
xmlhttp;
try
{
xmlhttp
=
new
ActiveXObject(
"
Msxml2.XMLHTTP
"
);
}
catch
(e)
{
try
{
xmlhttp
=
new
ActiveXObject(
"
Microsoft.XMLHTTP
"
);
}
catch
(e)
{
xmlhttp
=
new
XMLHttpRequest();
}
}
return
xmlhttp;
}
这段代码针对不同的浏览器使用了不同的创建方法,保证了程序的兼容性。
接下来需要创建一个方法实现对web服务器的异步请求。
AjaxFrameDemo.prototype.CallBack
=
function
(url)
{
if
(
this
.xmlhttp)
{
if
(
this
.xmlhttp.readyState
==
4
||
this
.xmlhttp.readyState
==
0
)
{
this
.xmlhttp.open('post',url);
this
.xmlhttp.onreadystatechange
=
function
()
{
this
.ReadyStateChange();
}
this
.xmlhttp.send(
null
);
}
}
}
AjaxFrameDemo.prototype.ReadyStateChange
=
function
()
{
if
(
this
.xmlhttp.readyState
==
1
)
{
this
.OnLoading();
}
else
if
(
this
.xmlhttp.readyState
==
2
)
{
this
.OnLoaded();
}
else
if
(
this
.xmlhttp.readyState
==
3
)
{
this
.OnInteractive();
}
else
if
(
this
.xmlhttp.readyState
==
4
)
{
if
(
this
.xmlhttp.status
==
0
)
this
.OnAbort();
else
if
(
this
.xmlhttp.status
==
200
&&
this
.xmlhttp.statusText
==
"
ok
"
)
this
.OnComplete();
else
this
.OnError();
}
}
这段代码中OnLoading等方法皆设定为空函数,只需给出声明,使用时可根据需要进行重写。
由于框架使用原型创建对象,实际应用时可以重写其中的部分属性与方法来完成不同项目的需求。另外,该部分只是完成了客户端的框架设计,还需要在服务器端增加一个C#类,读取HTTP请求并返回响应,有兴趣的朋友可自行完成。
小结:
这个Ajax框架结构比较简单,只是完成了最基本的Ajax功能,使用时可根据需要自行扩展,适用于比较小的项目开发。