export class LCTestRequestAction extends LCAction{ public playerId:string; public playerName:string; public passWord:string; constructor(playerId:string,playerName:string,passWord:string) { super(); this.playerId = playerId; this.playerName = playerName; this.passWord = passWord; export class LCTestResponseAction extends LCAction{ public playerId:string; public playerName:string; public passWord:string; constructor(jsonData:any){ super(); this.decode(jsonData); * 网络请求回调类 export class NetworkCallback{ private object:any; private func:any; * 网络请求回调类 * @param func 类 * @param object 对象(若为空则认定为匿名函数) constructor(func:any,object:any=null){ this.func = func; this.object = object; * @param state 状态 * @param response 数据 Call(state:number,response:any){ if (this.object){ this.func.call(this.object,state,response); }else{ this.func(state,response); * 服务端要注意开启允许跨域 * PHP: header('Access-Control-Allow-Origin:http://xxx'); export class HttpClient{ private serverAddr:string; constructor(serverAddr:string){ this.serverAddr = serverAddr; * 发送表单 * @param jsonData public PostFormData(url:string,jsonData:any,callback:NetworkCallback,async:boolean=true){ //数据格式化 var data = new FormData(); for(var attr in jsonData) { data.append(attr,jsonData[attr]); this.Send(url,"Post",data,false,callback,async); * 发送Json * @param url * @param jsonData * @param onSuccessCallback * @param onFailCallback * @param async public PostJson(url:string,jsonData:any,callback:NetworkCallback,async:boolean=true){ this.Send(url,"Post",JSON.stringify(jsonData),true,callback,async); public Get(url:string,jsonData:any,callback:NetworkCallback,async:boolean=true){ for(var attr in jsonData) { url = this.urlParam(url,attr,jsonData[attr]); this.Send(url,"Get",null,false,callback,async); private Send(url:string,method:string,data:any,isJsonData:boolean,callback:NetworkCallback,async:boolean){ //创建请求 var xhr = new XMLHttpRequest(); xhr.onreadystatechange = function () { if (xhr.readyState == 4 && (xhr.status >= 200 && xhr.status < 400)) { var response = xhr.responseText; if (callback){ //是否为Json数据 if (isJsonData){ response = JSON.parse(response); callback.Call(1,response); xhr.onerror = function(error){ if (callback){ callback.Call(0,error); xhr.ontimeout = function(){ if (callback){ callback.Call(0,"Timeout"); //建立连接并发送数据 xhr.open(method,"http://"+this.serverAddr+"/"+url, async); //Json数据添加头 if (isJsonData){ xhr.setRequestHeader("Content-Type", "application/json;charset=utf-8"); xhr.send(data); * 添加get参数 * @param url * @param name 参数名 * @param value 参数值 private urlParam(url, name, value) { url += (url.indexOf('?') == -1 ) ? '?' : '&' ; url += encodeURIComponent(name) + "=" + encodeURIComponent(value); return url; test(){ let jsonData={ playerId :"10", playerName :"10", passWord :"10", let callback = new NetworkCallback(function(state,response){ console.log(state,response); this.PostJson("myPerson",jsonData,callback,false); let lcTestRequestAction = new LCTestRequestAction("2193","dog","654321"); let jsonStr = JSON.stringify(lcTestRequestAction.encode()); console.log(jsonStr); let lcTestResponseAction = new LCTestResponseAction(JSON.parse(jsonStr)); console.log(lcTestResponseAction); console.log("send!"); 关于 XHR( XMLHttpRequest ),就是 AJAX 程序。既然为 AJAX S程序,自然少不了 XHR 的调用。在我之前的累积基础上,升级代码到 ts。 《用 XHR + curl.exe 制作 ddns 客户端 札记》( http s://blog.csdn.net/zhangxin09/article/details/6740558) 《简易封装 XHR:支持 GET/POST/PUT/DELETE/JSONP/FormData》( http s://blog.csdn.net/zhangxin09/ar JavaScirpt中的 XMLHttpRequest 对象提供了对 HTTP 协议的完全访问,使用该对象可以在不刷新页面的情况与服务器交互数据。 XMLHttpRequest 是实现 AJAX 技术的关键对象,本站曾整理过一篇介绍该对象的文章: JS使用 XMLHttpRequest 对象与服务器进行数据交互 ,今天将介绍使用 XMLHttpRequest 对象收发JSON格式数据。 在工作中有一个应用需... var request = new XMLHttpRequest (); request.open('POST', request_url); request.setRequestHeader("Content-type","application/json"); send_data = {'url': url, 'name': "zhang... POST请求的适用性更广,可使用更大的请求参数,而且POST请求的请求参数通常不能直接看到。因此在使用 Ajax 发送请求时,尽量采用POST方式而不是GET方式发送请求。发送POST请求通常需要如下的三个步骤: 1)        使用open方法打开连接时,指定使用POST方式发送请求。 2)        设置正确的请求头,POST请求通常应设置Content-Type请求头 1.要将发送的数据添加到FormData中(使用 XMLHttpRequest 必须要将数据添加到FormData中不然会保错) 2.new一个 XMLHttpRequest 出来 3.使用open方法指定要请求的方式(post或get)和URL 4.设置回调方法 5.最重要的一步:使用send方法(括号里面装的是保存在FormData的数据)发送数据 XMLHttpRequest 对象用于在后台与服务器交换数据。所有现代的浏览器都支持 XMLHttpRequest 对象。所有现代浏览器 (IE7+、Firefox、Chrome、Safari 以及 Opera) 都内建了 XMLHttpRequest 对象。 XMLHttpRequest 对象是开发者的梦想,因为您能够:1.在不重新加载页面的情况下更新网页 2.在页面已加载后从服务器请求数据 一、单例类的作用在我们平时开发H5游戏过程中,有某别对象,希望在内存中只有一份实例,其他任何地方想要获取到这个实例,只能通过这个类提供的静态方法来获取到实例,而任何地方进行new来进行构造的话,都会报错。总结一下这个单例类的要求 这个类只允许进行一个new的调用构造函数行为 提供静态方法来访问唯一实例 提供重复new会报错的设计 具备合理优化的设计模式 二、单例设计模式后面是借鉴的AS3的经典写法, enum RequestCache { noCache = 'no-cache', default = 'default', reload = 'reload', forceCache = 'force-cache', onlyIfCached = 'only-if-cached', cache = 'cache',}enum RequestMode { ...