Ajax是异步Javascript和XML(Asynchronous JavaScript and XML)的英文缩写。"Ajax"这个名词的发明人是Jesse James Garrett,而大力推广并且使Ajax技术炙手可热的是Google。Ajax的核心理念在于使用XMLHttpRequest对象发送异步请求。
场景1:数据验证
场景2:按需取数据
场景3:自动更新页面
1、AjaxPro
AjaxPro是首家支持以各种方式通过javascript访问服务端.net的免费库。它能把Javascript请求发送到.NET方法,服务端传回给Javascript,甚至包括串行化自定义类。
2、AjaxPro 的实例说明
①添加添加AjaxPro.dll应用
我这里用到的是ajaxpro.2.dll,ajaxpro就是ajax.net的类库(一个dll文件),是.net1.0的ajaxpro.2是.net2.0的, 大家可以到这里http://www.ajaxpro.info/进行下载。
②配置we.config
这一步的作用是保证客户端向"ajaxpro/*.ashx"的请求(POST和GET)都被AjaxPro.AjaxHandlerFactory拦截。
打开web.config文件,在
或者用下面的配置
③添加服务端方法
打开后台代码,在Page_Load方法体内加上如下代码,
AjaxPro.Utility.RegisterTypeForAjax(typeof(所在类的类名));
如图所示。
其作用是向客户端输出下面的代码:语句的作用:页面注册方法的作用。
③添加数字加一的方法,首先在方法前加 [AjaxPro.AjaxMethod],然后像写C#方法一样写方法,如图
注意:需要加上[Ajax.AjaxMethod]标识,这样才能够被客户端访问
④添加前台代码
⑤运行监测通过
⑥进阶代码
后台代码
下面的的代码是创建一个可序列化的类
[Serializable]
public class CSubStation
{
public string Code;
public string Name;
public string Longitude;
public string Latitude;
}
[AjaxPro.AjaxMethod]
public CSubStation[] GetSubStation()
{
CSubStation[] cs = null;
int i = 0;
int j = 0;
try
{
DataTable dt = SqlHelper.CaceExcutQeueryString(sqll, "qybjdtkey", DateTime.Now.AddDays(30));
if (dt.Rows.Count > 0)
{
cs = new CSubStation[dt.Rows.Count];
for (i = 0; i < dt.Rows.Count; i++)
{
CSubStation c = new CSubStation();
c.Code = dt.Rows[i]["SubStCode"].ToString();
c.Name = dt.Rows[i]["SubStName"].ToString();
c.Latitude = "";
c.Longitude = "";
if (dt.Rows[i]["Longitude"] != null)
{
double lon = 0;
string[] longitude = dt.Rows[i]["Longitude"].ToString().Split('*');
for (j = 0; j <= longitude.GetUpperBound(0); j++)
{
if (longitude[j] != "")
{
if (j == 0)
lon += double.Parse(longitude[j]);
if (j == 1)
lon += double.Parse(longitude[j]) / 60;
if (j == 2)
lon += double.Parse(longitude[j]) / 3600;
}
}
if (lon > 0)
c.Longitude = lon.ToString();
else
c.Longitude = "";
}
if (dt.Rows[i]["Latitude"] != null)
{
double lat = 0;
string[] latitude = dt.Rows[i]["Latitude"].ToString().Split('*');
for (j = 0; j <= latitude.GetUpperBound(0); j++)
{
if (latitude[j] != "")
{
if (j == 0)
lat += double.Parse(latitude[j]);
if (j == 1)
lat += double.Parse(latitude[j]) / 60;
if (j == 2)
lat += double.Parse(latitude[j]) / 3600;
}
}
if (lat > 0)
c.Latitude = lat.ToString();
else
c.Latitude = "";
}
cs[i] = c;
}
}
dt.Dispose();
}
catch (Exception ex)
{
string s = ex.ToString();
}
return cs;
}
客户端代码:
function GetStationData(e){
var result = null;
var table = null
var i = 0;
var x,y,s,t;
if(AddJpg == 0){
AddJpg = 1;
result = rightbody_bjdt.GetSubStation();
table = result.value;
if(typeof(table) == "object" && table != null){
for (i = 0;i < table.length;i++){
var x = table[i].Longitude;
var y = table[i].Latitude;
var s = table[i].Code;
var ss = table[i].Name;
var t = "
";
if (x != null && y != null){
if(x.search("^-?\\d+(\\.\\d+)?$") ==0 && y.search("^-?\\d+(\\.\\d+)?$") ==0){
var scode = "s" + s;
MapControl1.CustomLayer.InsertMark(scode,x,y,10,10,t);
}
}
}
}
}
setInterval(GetStatus,1000);
}