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 { ...