AJAX使用总结(Ajaxpro框架)
1.AJAX的异步调用产生的强烈UI体验,是否也曾令你惊叹,我也是用的不亦乐乎。AJAX调用经常会用在客户端前台从服务器端得到信息的一种手段,常常我们会连续多次进行异步调用,问题来了,如果在同一次执行序列(这里可以指一个函数,或者一系列语句)中,比如点击一个Button,需要;连续进行两次异步调用的话,那么第二次调用会彻底失败,回调函数不会执行,你期望的效果也不会出现。这个时候,你想到了什么?调试!(好,你就是三楼楼长!)可是调试完,依然得不到结论,回调函数就是不执行,你能咋的?!而且更有甚者,如果在两个异步调用中间加上一个中断,比如alert(),或者settimeout(这个函数还要注意时间间隔要设置的足够长,否则仍然不会响应第二个回调函数),这如何是好呢?我灵机一动,两个异步不行,我把一个改成同步的呢---------->OK!!看来硬的来不了,只能来软的,我换掉你不就OK了,最后适当调整同步和异步的调用位置,这样依然可以收到很好的效果。再者,要解决这个问题,也可以用我前面提到的setTimeout()函数。(估计是服务器接受客户端响应会过滤掉较短时间之内的其他响应吧。)
2.你是否在使用AJAX函数的时候,苦恼为什么每个页面都需要写AJAX函数,到处分散,不易管理维护啊。现在我告诉你不用发愁,我给你开个药方:
我们新建一个类,名字可以叫AjaxFunctions.注意:这个类一定要是可以序列化的,即加上[Serializable],这个是关键,然后你就可以在其中定义你得带jax.AjaxMethod的方法。然后在PageBase(页面基类)中注册这个方法Ajax.Utility.RegisterTypeForAjax(typeof(AjaxFunctions)).如果你想在Ajax方法中使用页基类的属性或者方法,你还可以让 AjaxFunctions继承PageBase,注意注册的地方不能放在构造函数中,应该重写Page的Load()函数.如果你需要在方法中使用Session,不要忘了加上 HttpSessionStateRequirement.ReadWrite。下面是一个例子:
我们新建一个类,名字可以叫AjaxFunctions.注意:这个类一定要是可以序列化的,即加上[Serializable],这个是关键,然后你就可以在其中定义你得带jax.AjaxMethod的方法。然后在PageBase(页面基类)中注册这个方法Ajax.Utility.RegisterTypeForAjax(typeof(AjaxFunctions)).如果你想在Ajax方法中使用页基类的属性或者方法,你还可以让 AjaxFunctions继承PageBase,注意注册的地方不能放在构造函数中,应该重写Page的Load()函数.如果你需要在方法中使用Session,不要忘了加上 HttpSessionStateRequirement.ReadWrite。下面是一个例子:
3.在Ajax方法中使用Session不能直接使用,需要这么写:HttpContext.Current.Session[""];
5.有时候前台脚本会出现错误,这些错误可能无关紧要,也可能影响功能的使用,但是对于用户来说,脚本错误不会影响他浏览网页,但是功能就是用不了了,用户就不知道所以然了。所以当发生错误的时候,我们一定要提醒用户,需要立刻中止页面的使用,那么可以类似后台的ErrorHandler,我们可以利用Window.error这个事件,在PageBase中写以下代码:
这样你可以在Error事件中处理任何脚本错误了,给用户一个友好的提示:)
4.往往我们在调用Ajax方法的过程中,可能会发生异常,这样回调会失败,但是页面不会看到任何效果,也不会转到错误页面,好像什么也没发生,作为程序员的我们当然希望它不管好坏总要做点反应吧,但是让你失望了:(,所以我建议,在Ajax方法中尽量将异常抛出来,可以使用Try...Catch,记录异常,但是Catch后仍然要Throw出来,这样在回调函数中我利用Response的Error属性:res.error,如:
5.有时候前台脚本会出现错误,这些错误可能无关紧要,也可能影响功能的使用,但是对于用户来说,脚本错误不会影响他浏览网页,但是功能就是用不了了,用户就不知道所以然了。所以当发生错误的时候,我们一定要提醒用户,需要立刻中止页面的使用,那么可以类似后台的ErrorHandler,我们可以利用Window.error这个事件,在PageBase中写以下代码:
这样你可以在Error事件中处理任何脚本错误了,给用户一个友好的提示:)