2007年06月26日

凌晨2点回来,给Rect做了个新feature,做了3个多小时。。。太tmd久了!

其实这个feature很简单,之前一直使用传统方法的ASP.NET初学者就可以胜任。

不用任何框架完全手写Ajax真是一件非常艺术和麻烦的事情啊。

下面仅以文字记录下这段艰辛的旅途,也为和我一样手写Ajax的人提供一点哪怕是思考的东西。

image

上面的图描述了我要做的工作,这是一个搜索的选项,我现在要做的是在分别change省的时候他们右边的学校和城市都能够局部刷新而不是和传统的ASP.NET一样刷新整个页面。然后在我点击查询的时候能够获取到我刚才设定的信息。

首先我是这样做的:假设这个页面叫做search.aspx,在html里我写上了一段公用的Javascript函数createXmlHttpRequest用来建立xmlHttpRequest。

然 后在province的onchange事件里写了一个函数,调用了createXmlHttpRequest,并用建立的xmlHttpRequest 向服务器发送了当前的province,然后在服务器端读取school.xml,并返回了所对应的学校。利用xmlHttpRequest取得了返回的 信息,然后利用javascript填充了school的dropDownList。同理,下面的省change的时候后面对应的城市信息也是这样局部刷 新的。

这时问题1就出现了:由于学校和城市的信息是在服务器返回信息后利用javascript在客户端做的,所以服务器并不知道这个变化,因此在点击查询的时候无法用school.selectedValue来获取学校或者是城市当前选择的值。

解决1 这样可以解决,在学校和城市的onchange事件中把当前选择的值发给服务器,让服务器记录下来,我用的是session记录,其他的当点击查询按钮再postback回去的时候就消失了。(在if (!IsPostback)里记录的session)

这下问题似乎解决了,其实不然,session的过期是需要时间的,这样当我们重新刷了页面,即使不选择任何条件做查询,返回的结果仍然是上次的结果,为什么?session没过期啊!仍然存着现在本该没有的值!这问题2已经出现了。

解决2 可 能有人会这样想,在 if (!IsPostback)外面清空下session不就完了吗?唉!这样就什么都查不了了。kkJ想错了啊。那怎么清空该清空的session呢?我是 这样做的,在客户端又写了一个javascript函数clearsession,在省变成"请选择"的时候一边清空后面的list一边向服务器发回一个 参数(学校的发回school,城市的发回city供服务器识别)告诉服务器该清空哪个session了。这样问题似乎又解决了。

可是。。。这样在单独设置查询条件的时候还可以work,但是当我同时选择这个两个查询条件的时候,问题3出现了。我们先用第一个的省和对应学校查询,查出结果了,然后呢再选择第二个省和对应的城市,这是的问题在于会在服务器端刚才在解决2里设置的清除session函数中把条件1的session清除了,结果变成了只用条件2查询。。。

解决3 这个可以这样解决,在清除自己的条件对应的session的时候先判断一下另外的一个条件在问题1中传过来的参数是不是为空,为空了再清除session。

千万不要以为这样就好了啊。。。万恶的小峰在本页面加载的时候利用OnPreRender函数给查询的按钮加了参数为null的onClick属性,问题4出现了,这就是说在页面加载的时候那个session依然会起作用,而在页面重新加载的时候是不需要任何参数的。

解决4,无奈之下,虽然增加了代码量,但是谁让现在的计算机计算能力这么强呢!重新为它写了一个写了一个获取查询条件的函数,把值都设置为无了。这样就好了。

基本上大的问题就这四个了,其中还有一些小的问题,忽略不计了!

靠!VS2003真tmd老了啊!改日有空把项目开发环境升级到VS2005,再也不要忍受这种利用VS2003开发Ajax应用的煎熬了啊!!!!

人家写好的框架干嘛不用。。。

Tags: ,,,,,.
2007年06月25日

个备忘

问题:浏览器端用javascript操作document获取一些值之后发回服务器的时候总是发回乱码。

解决:用escape()函数编码一下再发回去就好了。

Tags: ,.
2007年06月16日

里偷闲,网上到处乱逛,发现一段极有趣的Javascript,贡献出来大家一起娱乐娱乐。到底如何有趣??

试试就知道了!

1、随便打开一个网页,比如www.sina.com,但你最好还是打开一个图片多的网页,比如我用google搜索“搞笑图片”的链接 搞笑图片

2、在地址栏里把原来的url删掉吧!然后加入下面的这段Javascript

javascript:R=0; x1=.1; y1=.05; x2=.25; y2=.24; x3=1.6; y3=.24; x4=300; y4=200; x5=300; y5=200; DI=document.images; DIL=DI.length; function A(){for(i=0; i-DIL; i++){DIS=DI[ i ].style; DIS.position='absolute'; DIS.left=Math.sin(R*x1+i*x2+x3)*x4+x5; DIS.top=Math.cos(R*y1+i*y2+y3)*y4+y5}R++}setInterval('A()',5); void(0);

3、输入回车,看看你看到了什么!

Tags: .