专注于互联网--专注于架构

最新标签
网站地图
文章索引
Rss订阅

首页 »Flash教程 » flex调用js:Flex扩展HTTPService简化调用接口定义 »正文

flex调用js:Flex扩展HTTPService简化调用接口定义

来源: 发布时间:星期四, 2009年2月12日 浏览:97次 评论:0
  Flex提供MXML来描述个HTTPService看上可以简化开发人员工作但实际上这种描述HTTPService方式很容易产生重复代码导致代码不好维护和扩展数据交互接口唯定义对系统维护非常有利但基于AS定义HTTPService也是件烦琐事情;那如何做才能够达到方便地定义接口呢

  接口定义

  以下是定义个登陆HTTPService

  public ILogin extends HttpBase
  {
    public function ILogin(method:String="get", result:Function=null)
    {
      super("userlogin", method, result);
    }
    public var UserName:String;
    public var UserPWD:String;
    public var ImgSN:String;
    public var ImgKey:String;
  }


  看上非常简单只需要继承HttpBase然后效需要提交参数定义成Public成员即可以对于构造参数下介绍HttpBase时候讲述;对于这个接口又是怎样

var send:ILogin = ILogin(      "get",function(data:XML,error:Boolean){
           (!error)
           {
           }
         });
         send.UserName= txtName.text;
         send.UserPWD=txtPWD.text;
         send.ImgKey= ic.ImageKey;
         send.ImgSN=ic.ImageSN;
         send.Open;


  如果并不想考虑太多处理只关心登陆处理可以这样定义

var send:ILogin = ILogin
send.UserName= txtName.text;
send.UserPWD=txtPWD.text;
send.ImgKey= ic.ImageKey;
send.ImgSN=ic.ImageSN;
send.Open;


  服务端代码

  对于服务端代码就可以根据自己需来处理jsp,asp,asp.net,php都是样只要接收http请求即可为了便于理解把服务端代码顺便贴出来:

  [NClay.Web.Service.ActionMapper]
  public UserLogin : ActionBase
  {
    protected override void _disibledevent=>      (user null)
        throw Exception("用户名或密码不正确!");
       (user != null && !user.Enabled)
        throw Exception("用户已经被系统禁用,请和管理员联系!");
      mLoginer = user;
      mIsLogin = mLoginer != null;
      FormsAuthentication.SetAuthCookie(Loginer.UserName, true);
      LoginID = Loginer.UserID;
      LoginName = Loginer.UserName;
      base.OnGet;
    }
    public UserName
    {
      get;
      ;
    }
    public UserPWD
    {
      get;
      ;
    }
    [NClay.Web.Service.OutputXml]
    public LoginID
    {
      get;
      ;
    }
    [NClay.Web.Service.OutputXml]
    public LoginName
    {
      get;
      ;
    }
    public NClay.Web.Actions.ImageValidate ImageValidate
    {
      get;
      ;
    }
  }


  HttpBase定义

  该HttpBase是针对本人现有需求所制定所以并不定适合你需要;但作为个参考

public  HttpBase
  {
    private var mService:HTTPService=null
    private var mResult:Function=null;
    private var mFristSearch:Boolean=false;
    public var _TimeSlice:Date;
    public function GetService:HTTPService
    {
      mService;
    }
    public function HttpBase(api:String,method:String="get",result:Function=null)
    {
      mService = HTTPService;
      mService.useProxy=false;
      mService.url=GetServiceUrl+api;
      mService.resultFormat="e4x";
      mService.method=method;
      mService.addEventListener(FaultEvent.FAULT,HFSoftCoreFun.onFault);
      mService.addEventListener(ResultEvent.RESULT,OnResult);
      mResult=result;
    }
    protected virtual function GetServiceUrl:String
    {
      "service.aspx?do=";
    }
    private function _disibledevent=>      var iserror:Boolean=HFSoftFx.HFSoftCoreFun.IsError(data);
      (mResult!=null)
       mResult(data,iserror);
    }
    public function get FirstSearch:Boolean
    {
      mFristSearch;
    }
    public function Open(firstSearch:Boolean=false)
    {
      _TimeSlice = Date;
      mFristSearch=firstSearch;
      mService.send(this);
    }
  
  }
代码也非常简单就是在httpservice基础上包装其实了解AS朋友应该可以看得出对于动态语言来说直接把HttpBase定义成动态类然后直接设置成员提交这样就省下每个交互都定义个类型出来这么麻烦但作为个服务接口成员越明确越好是要经常修改和维护;不过是不是要这样做就是团队(Team)约束规范标准问题了

0

相关文章

读者评论

发表评论

  • 昵称:
  • 内容: