asp.net+xml实现无刷新调数据
这个实列只适合操作小数据量时使用,如果调用大量数据会出现很长的延时。同时加入识别id(CallBackid),加入这个id的作用在于如果页面上有多处需要调用时,用来区分数据,否则会引起数据冲突。下面是代码:
js操作类(可单独封装成js类文件):
js操作类(可单独封装成js类文件):
var xmlhttp;
var CallBackid ;//返回标志
//xml函数部分
function CreateXmlHttpRequest()
{
// 使用 try 来捕获创建失败,再换个方法来创建
try { // 如果不成功,那么尝试在较新 IE 里的方式
xmlhttp=new ActiveXObject("MSXML2.XMLHTTP");
}
catch(e) {
try {
// 失败则尝试使用较老版本 IE 里的方式
xmlhttp=new ActiveXObject("Microsoft.XMLHTTP");
}
catch(e1) {
xmlhttp=false;
}
}
if (!xmlhttp) { // 如果创建 XMLHttpRequest 对象失败,那么提醒访问者该页面可能无法正确访问
alert("Xml文件创建失败!");
return xmlhttp;
}
}
function GetXmlHttp(url,tk)
{
CallBackid = tk;//
if (url == null || url == "") return null;
var xmldom = new ActiveXObject("Microsoft.XMLDOM");
CreateXmlHttpRequest();
xmlhttp.open("GET",url,false,"","");
xmlhttp.onreadystatechange = startCallback;
xmlhttp.send(null); // 发送请求,因为是GET,所以send的内容为null
}
// 通过xmldom操作结果
// 因为使用异步方式所以要在 XMLHttpRequest 对象的状态改变时做相应的处理
function startCallback()
{
if(xmlhttp.readyState==4) // 如果 XMLHttpRequest 的状态为4,应该是ready来的,那么继续处理
{
if(xmlhttp.status==200) // 需要判断返回状态是否为200 OK,有些情况如文件不存在,就为返回404
{
switch(CallBackid )
{
case 1:
xmldom = xmlhttp.responseXML.documentElement;//每个引用定义的类名要区分开,要不数据会重复
//需要调用的函数名
break;
case 2:
VehDataxmldom = xmlhttp.responseXML.documentElement;
//需要调用的函数名
break;
case 3:
Aralmxmldom = xmlhttp.responseXML.documentElement;
//需要调用的函数名
break;
default:
break;
}
}
else
{
alert("HTTP error: "+xmlhttp.status);
}
}
}
执行数据库查询的aspx页面(此页面非引入js文件的页面,它只是调用数据的中间页),即url中cs文件包含内容
var CallBackid ;//返回标志
//xml函数部分
function CreateXmlHttpRequest()
{
// 使用 try 来捕获创建失败,再换个方法来创建
try { // 如果不成功,那么尝试在较新 IE 里的方式
xmlhttp=new ActiveXObject("MSXML2.XMLHTTP");
}
catch(e) {
try {
// 失败则尝试使用较老版本 IE 里的方式
xmlhttp=new ActiveXObject("Microsoft.XMLHTTP");
}
catch(e1) {
xmlhttp=false;
}
}
if (!xmlhttp) { // 如果创建 XMLHttpRequest 对象失败,那么提醒访问者该页面可能无法正确访问
alert("Xml文件创建失败!");
return xmlhttp;
}
}
function GetXmlHttp(url,tk)
{
CallBackid = tk;//
if (url == null || url == "") return null;
var xmldom = new ActiveXObject("Microsoft.XMLDOM");
CreateXmlHttpRequest();
xmlhttp.open("GET",url,false,"","");
xmlhttp.onreadystatechange = startCallback;
xmlhttp.send(null); // 发送请求,因为是GET,所以send的内容为null
}
// 通过xmldom操作结果
// 因为使用异步方式所以要在 XMLHttpRequest 对象的状态改变时做相应的处理
function startCallback()
{
if(xmlhttp.readyState==4) // 如果 XMLHttpRequest 的状态为4,应该是ready来的,那么继续处理
{
if(xmlhttp.status==200) // 需要判断返回状态是否为200 OK,有些情况如文件不存在,就为返回404
{
switch(CallBackid )
{
case 1:
xmldom = xmlhttp.responseXML.documentElement;//每个引用定义的类名要区分开,要不数据会重复
//需要调用的函数名
break;
case 2:
VehDataxmldom = xmlhttp.responseXML.documentElement;
//需要调用的函数名
break;
case 3:
Aralmxmldom = xmlhttp.responseXML.documentElement;
//需要调用的函数名
break;
default:
break;
}
}
else
{
alert("HTTP error: "+xmlhttp.status);
}
}
}
protected void Page_Load(object sender, EventArgs e)
{
GetData();
}
protected void GetData()
{
SqlServerDataBase db = new SqlServerDataBase();
DataSet dt = db.Select("自己的sql语句") ", null);
Response.ContentType = "text/xml";
Response.Write(dt.GetXml());
Response.End();
}
以上代码在点击按钮时触发,如果需要页面载入时调用或每隔一段时间就去调用实时数据,需在引用该js文件的页面写如下代码
{
GetData();
}
protected void GetData()
{
SqlServerDataBase db = new SqlServerDataBase();
DataSet dt = db.Select("自己的sql语句") ", null);
Response.ContentType = "text/xml";
Response.Write(dt.GetXml());
Response.End();
}
<script type="text/javascript" language="javascript">
function pageonloadxml()
{
GetXmlHttp(aa.aspx',3);
GetXmlHttp(bb.aspx',1);
setTimeout("pageonloadxml();",10000);
}
</script>
<body onload="pageonloadxml();" >
当然,自己还可以再写一些控制函数,来控制页面的刷新或数据的回调。
function pageonloadxml()
{
GetXmlHttp(aa.aspx',3);
GetXmlHttp(bb.aspx',1);
setTimeout("pageonloadxml();",10000);
}
</script>
<body onload="pageonloadxml();" >