最近一些时间都有在学习地图方面的知识,用的ArcIMS9.2发布地图,读它的html版的源码,都是用的脚本写的,设计的架构还是不错,只是感觉里面有很多重复的东西,而且感觉功能什么的都不是很强大,看了几天后,差不多把它的工作原理搞清楚了,就想自已按照自已的思路动手自已做一个,其中请求地图的一块用ajax做,所以这些时间里对ajax稍微研究了下。本来就觉的web端开发的话,要用的技术知识很多,但都很小块,每一块不会很难,单从这种纯技术上来说,不会有很多太困难的技术点;但是当要用这些小块的技术构架成一个web应用的时候,就会变的复杂。Ajax也一样,单个的应用也没有什么难点,只是一些小细节注意一下,多测几次就出来了,更重要的是一种架构的思想,异步的思想,而且要如何把它应用到自已的开发中,为自已的开发带来真正的改观。下面是一些ajax应用的小细节
一.使用框架(.NET中)
现在网上的框架比较多,各种平台的都有,使用了较简单,一般都是只要配置下就可以用了,在网上找了AjaxPro
首先是下载http://download1.csdn.net/down3/20070612/12092627946.dll
在.NET下的应用主要是三步骤:
>> 在项目中引用AjaxPro.dll
>> 首先是web.config里面的配置信息
>> 然后在页面中Using AjaxPro
1.Web.config文件中加上如下配置:
<httpHandlers>
<add verb="POST,GET" path="ajaxpro/*.ashx" type="AjaxPro.AjaxHandlerFactory, AjaxPro"/>
</httpHandlers>
2. 打开后台代码,在Page_Load方法体内加上如下代码,
AjaxPro.Utility.RegisterTypeForAjax(typeof(所在类的类名));
3.写类方法
[AjaxPro.AjaxMethod]
Public int add(int a,int b)
{
a = a+b;
return a;
}
4.在web端页面中直接使用
var result = [名称空间].[类名]. add (1,2);
Ok了,就这么简单!!
二.自已写页面请求和后台处理文件
1. Web页面
var oXmlHttp = null; //定义一个XMLHTTPRequest对象
var isXml = true; //是否以xml格式获取数据
// 功能: 创建XMLHttpRequest对象
function initXMLHTTPRequest()
{
var xRequest = null;
if(window.XMLHttpRequest){
xRequest = new XMLHttpRequest();
}
else if(window.ActiveXObject){
xRequest = new ActiveXObject("Microsoft.XMLHTTP");
}
return xRequest;
}
//发送XMLHttpRequest请求
function sendRequest(HttpMethod,url,params)
{
if(!HttpMethod){
HttpMethod = "GET";
}
oXmlHttp = initXMLHTTPRequest();
if(oXmlHttp){
oXmlHttp.onreadystatechange = onReadyState ;
oXmlHttp.open(HttpMethod,url,true);
oXmlHttp.setRequestHeader
("Content-Type","application/x-www-form-urlencoded");
oXmlHttp.send(params);
}
}
//XMLHttpRequest回调函数 dependent on toConsole(oXmlData)
function onReadyState()
{
var oXmlData = null;
if(oXmlHttp.readyState == 4)
{
if(oXmlHttp.status == 200)
{
if(isXml){
oXmlData = oXmlHttp.responseXML;
toConsole(oXmlData); //数据处理函数
}
else{
oXmlData = oXmlHttp.responseText;
toConsole(oXmlData);
}
}
else{
toConsole(null);
}
}
}
2.服务器端可以写一个.ashx的页面,处理请求。一般的页面也行,只是有点要注意的是,在提交的参数中,如果前端是用”POST”,后台的程序中只能用context.Request.Form方法获的,不能用QueryString获的;
3.如果在一个工程里面用了框架,再用自已写的方法时,会发现一些问题,我开始的时候用的框架,然后在一些地方用了自已的方法,发现自已的方法就是访问不到要请求的页面,而且返回的是一个12030的非常规错误(查了下,是服务器返回的错误,一般的话用XMLHTTPRequest请求的时候,在帮助文档里查的错误说明中都是三位数的),后来测了几回才发现,是用框架的时候在web.config配置文档中添的那个东东在做怪,<httpHandlers>。。。。 </httpHandlers>,也就是说这句话把httpHandlers的请求都转上了用框架定义的方法上去了。。。又用框架,又用自已的方法要怎么个做法,也没有去考虑了,想想也就那么点代码,自已写写也无所谓了,再说不想让自已做出来的东西,框架依赖性太大,就没用了。。。。。
三.XMLHTTPRequest对象的权限
以前用的时候没有发现这个问题的,但在做地图页面的时候才知道了还有这么个问题,现在一般是要用什么技术的时候就去学下,也不知道相关的ajax的书里面有没有写到。因为系统的站点跟地图服务在服务器端是二个独立的站点,在做地图页面的时候我本想所有的地图服务请求之类的都直接在页面上面做,可是请求的时候老是提示“拒绝访问”, oXmlHttp.open(HttpMethod,url,true) 测试的时候我把url换成了http://www.qq.com/等等这类的。发现还是同样的提示.请求本机上别的站点上的页面也是一样。但请求同一站点内的东西的时候安全正常,我就想,XMLHTTPRequest对象的权限只是在站点域内有效(不过在网上看到有人说可以怎么怎么设置的,也没去管了,我想就算能设置,在架构上也不合理)。就只好请求一个站点内的.ashx页面,然后再由服务器去请求地图信息,再返回给页面
(这二天比较痛苦,本本以前是很多出差的人用过的,里面太多东西了,什么都装过,实在是受不了了,决定重装系统,而且重分区,谁知道在备份的时候,项目打包的时候打错了,还是打的20来天前的,做的东西全没了,,,,还好第二次做的时候比刚学的时候快多了,而且还改进了很多的地方,正所谓”xx失yy,你知道是好事还是坏事J”,人在失落的时候不要悲观,但要努力,在得意的时候不可松懈,而要更努力)