AJAX使用总结(Ajaxpro框架)

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。下面是一个例子:
Title
[Serializable]
 public class AjaxFunctions:PageBase
 {
  public AjaxFunctions()
  {
   
  }
  [AjaxPro.AjaxMethod(AjaxPro.HttpSessionStateRequirement.ReadWrite)]
  public bool ValidateUser(string IDNo, string Password)
  {  
   try
   {
    RecuUser user = UserHandler.GetUerToValidate(IDNo, Password);    
    this.CurrentUser = user;
    if(user == null)
    {
     return false;
    }
    else
    {
     return true;   
    }
   }
   catch
   {    
    return false;
   }   
  }
}
3.在Ajax方法中使用Session不能直接使用,需要这么写:HttpContext.Current.Session[""];
4.往往我们在调用Ajax方法的过程中,可能会发生异常,这样回调会失败,但是页面不会看到任何效果,也不会转到错误页面,好像什么也没发生,作为程序员的我们当然希望它不管好坏总要做点反应吧,但是让你失望了:(,所以我建议,在Ajax方法中尽量将异常抛出来,可以使用Try...Catch,记录异常,但是Catch后仍然要Throw出来,这样在回调函数中我利用Response的Error属性:res.error,如:
Title  function DocumentsReady_CallBack(response)
  {
   if (response.error != null)
   {
    alert(response.error);//Redirect to Error Page...
    return;
   }
  }

5.有时候前台脚本会出现错误,这些错误可能无关紧要,也可能影响功能的使用,但是对于用户来说,脚本错误不会影响他浏览网页,但是功能就是用不了了,用户就不知道所以然了。所以当发生错误的时候,我们一定要提醒用户,需要立刻中止页面的使用,那么可以类似后台的ErrorHandler,我们可以利用Window.error这个事件,在PageBase中写以下代码:
 
Title StringBuilder Onerror = new StringBuilder();
  Onerror.Append("<script language=javascript>/n");
  Onerror.Append("function clientPage_OnError(msg,url,l){/n");
  Onerror.Append("var errorMsg='There was an error on this page.';/n");
  Onerror.Append("errorMsg +='Error: ' + msg;/n");
  Onerror.Append("errorMsg +='URL: ' + url;/n");
  Onerror.Append("errorMsg +='Line: ' + l;/n");
  Onerror.Append("location.href('" + this.UrlBase + "/ErrorPage.aspx?ErrorMessage='+errorMsg);}/n");
  Onerror.Append("</script>");
  Page.RegisterClientScriptBlock("ErrorHandler",Onerror.ToString().Trim());
  Page.RegisterClientScriptBlock("Onerror","<script language=javascript>onerror = clientPage_OnError;</script>");

这样你可以在Error事件中处理任何脚本错误了,给用户一个友好的提示:)
 
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值