异步HTTP请求操作,Jquery使用ajax参数详解

一、说明

一、说明

【原创-算法-完成】异步HTTP请求操作,算法异步

一、说明

  一) 那几个类 是自己 在真正项目中,优消除决实际难题时,不参照第3方代码,完全由友好查阅MSDN官方文档 ,
落成的贰个真实生产条件中应用的效能类

  贰) 读者在行使此类时,请敬爱原创,在代码中加上原创注释://  Author —
Meng.NET (cnblogs.com)  ,同时应接 三次改革、3回创作 以共同升高

  叁)
此代码以【面向对象】、【C#闭包】、【异步回调】、【超时】、【等待】、【自动重试】格局落成及完毕,且能够配备扩张

二、代码

  废话不多说,上干货,代码如下:

亚洲必赢官网 1 1 ///
<summary> 2 /// 异步 Http 3 /// </summary> 4 public class
Remoter 5 { 6 /* 7 * LM,2016/08/18 8 * C#闭包化,异步化,Web操作 9 *
以便支持POS多接口多操作同时采取 十 */ 1一 1二 /// <summary> 壹3 ///
请求地址 1肆 /// </summary> 一五 public string U奥德赛L { get; set; } 16
17 /// <summary> 1八 /// 请求方式 1九 /// </summary> 20 public
string RequestMethod { get; set; } 二一 2二 /// <summary> 2三 ///
伸手数据 二4 /// </summary> 二伍 public string JsonContent { get;
set; } 二陆 二柒 // 2八 private byte[] Buffer { get; set; } 29 private
Stream RequestStream { get; set; } 30 private HttpWebRequest Request {
get; set; } 31 private bool ResponseFlag { get; set; } 32 private string
Result { get; set; } 33 private bool TimeoutFlag { get; set; } 34
private int TimeoutTime { get; set; } 35 private bool RetryFlag { get;
set; } 36 private int RetryCount { get; set; } 37 private int WaitSleep
{ get; set; } 38 private int TrySleep { get; set; } 39 40 // 初始化 41
public Remoter() 42 { 43 // 44 ServicePointManager.SecurityProtocol =
SecurityProtocolType.Tls | SecurityProtocolType.Ssl3; 45
ServicePointManager.ServerCertificateValidationCallback = new
RemoteCertificateValidationCallback((object sender, X509Certificate
certificate, X509Chain chain, SslPolicyErrors errors) => true); 46 47
// 48 this.URL = string.Empty; 49 this.Request =
default(HttpWebRequest); 50 this.JsonContent = string.Empty; 51
this.Buffer = default(byte[]); 52 this.RequestStream =
default(Stream); 53 this.ResponseFlag = false; 54 this.Result =
string.Empty; 55 this.TimeoutFlag = false; 56 this.TimeoutTime = 10 *
一千; 伍7 this.RetryFlag = false; 58 this.RetryCount = 3; 59this.WaitSleep = 10; 60 this.RequestMethod = “POST”; 陆1 this.TrySleep =
2000; 6二 } 陆三 6四 /// <summary> ⑥五 /// 获取响应数据 6⑥ ///
</summary> 陆7 public string GetRemoteData() 68 { 6玖 // 70
if(string.IsNullOr惠特eSpace(this.ULacrosseL)) 7一 { 7二 throw new
Exception(“HttpAsync.U凯雷德L,未赋值!”); 7叁 } 7四 75 // 7六RemoteNew(SetResult); 7柒 7八 // 7玖 var timeNum = 0; 80 while (true) 八一 {
8贰 if (ResponseFlag) 八三 { 八四 break; 八伍 } 八陆 if (TimeoutFlag) 87 { 8八throw new Exception(string.Format(“请求超时!超时时间:{0}S”, TimeoutTime
/ 1000)); 8玖 } 90 timeNum += WaitSleep; 9一 if (timeNum >=
TimeoutTime) 九贰 { 93 TimeoutFlag = true; 94 } 95Thread.Sleep(WaitSleep); 玖六 } 九七 九捌 // 9玖 return Result; 100 } 101 102
// 10三 private void RemoteNew(Action<Remoter, string> action) 十四{ 10伍 // 十六 var reNum = 0; 拾七 for (var i = 0; i < this.RetryCount;
i++) 拾八 { 十九 try 1十 { 11壹 // 11二 var uri = U卡宴L; 113 114 // 1一5this.Request = WebRequest.Create(uri) as HttpWebRequest; 11陆this.Request.KeepAlive = false; 1一柒 this.Request.Method =
this.RequestMethod; 11八 this.Request.Credentials =
CredentialCache.DefaultCredentials; 11玖 if
(this.RequestMethod.Equals(“POST”, StringComparison.OrdinalIgnoreCase))
120 { 1二一 this.Buffer = Encoding.UTF捌.GetBytes(this.JsonContent); 122this.Request.ContentLength = this.Buffer.Length; 12三this.Request.ContentType = “application/json”; 1二四 this.RequestStream =
this.Request.GetRequestStream(); 125this.RequestStream.Write(this.Buffer, 0, this.Buffer.Length); 126this.RequestStream.Close(); 12柒 } 12八 129 // 130
this.Request.BeginGetResponse((arr) => 13一 { 13二 // 13叁 var state =
arr.AsyncState as Remoter; 13肆 // 135 var response =
state.Request.EndGetResponse(arr) as HttpWebResponse; 13六 var respStream
= new StreamReader(response.GetResponseStream(),
Encoding.GetEncoding(“UTF-8”)); 1叁7 action(state,
respStream.ReadToEnd()); 138 respStream.Close(); 13玖 response.Close();
140 }, this); 1四1 // 142 break; 1四三 } 14四 catch (Exception ex) 14伍 { 1四陆Thread.Sleep(this.TrySleep); 1四七 reNum++; 14八 if (reNum ==
this.RetryCount) 14九 { 150 throw new
Exception(string.Format(“重试退步!重试次数:{0}次,失败原因:{一}”,
this.RetryCount, ex.Message)); 15一 } 152 continue; 153 } 15四 } 155 } 15陆private void SetResult(Remoter state, string jsonData) 1伍七 { 15八 if
(!string.IsNullOrWhiteSpace(jsonData)) 159 { 160 state.Result =
jsonData; 161 state.ResponseFlag = true; 162 } 163 } 164 } Remoter.cs

  使用方法:

  GET: 

亚洲必赢官网 21 var
remoter = new Remoter(); 二 remoter.RequestMethod = “GET”; 三 remoter.U牧马人L
= “那里是你要央浼的U奥德赛L”; 四 var response = remoter.GetRemoteData(); View Code

  POST:

亚洲必赢官网 3一 var
remoter = new Remoter(); 二 remoter.RequestMethod = “POST”; 三 remoter.ULacrosseL
= “你要请求的U讴歌RDXL”; 四 remoter.JsonContent = “你要想URAV4L发送的JSON数据”; 5var response = remoter.GetRemoteData(); View Code

叁、代码解析

    public Remoter() 早先化本类,可安插到 App.config/Web.config 中

亚洲必赢官网 4 1 // 2
this.URL = string.Empty; 3 this.Request = default(HttpWebRequest); 4
this.JsonContent = string.Empty; 5 this.Buffer = default(byte[]); 6
this.RequestStream = default(Stream); 7 this.ResponseFlag = false; 8
this.Result = string.Empty; 9 this.TimeoutFlag = false; 10
this.TimeoutTime = 10 * 一千; 1壹 this.RetryFlag = false; 12this.RetryCount = 3; 1三 this.WaitSleep = 10; 1四 this.RequestMethod =
“POST”; 一五 this.TrySleep = 三千; 可从布局文件读取部分

  public string UPAJEROL 要请求的地点

  public string RequestMethod HTTP 动词

亚洲必赢官网,  public string JsonContent POST 请求时,发送的json数据

  private byte[] Buffer 设置请求流的byte数组

  private Stream RequestStream 请求流

  private HttpWebRequest Request HTTP请求对象

  private bool ResponseFlag 与请求对应的响应是或不是中标标志

异步HTTP请求操作,Jquery使用ajax参数详解。  private string Result 回调状态保持对象,保存响应结果用

  private bool TimeoutFlag 总超时时间是还是不是过期标志

  private int TimeoutTime 总超时时间(包罗若干次重试),暗许十s

  private int RetryCount 总U途观L调用(退步)自动重试次数,暗中同意三回

  private int WaitSleep 主线程,仿Ajax回调等待时间,私下认可拾ms

  private int TrySleep 每回请求地址战败后,重试时间距离,暗中同意2s

  public string GetRemoteData()  解析:

亚洲必赢官网 5 一 // 2var timeNum = 0; 三 while (true) 四 { 伍 if (ResponseFlag) 6 { 7 break; 八 }
九 if (TimeoutFlag) 10 { 1一 throw new
Exception(string.Format(“请求超时!超时时间:{0}S”, TimeoutTime / 一千));
1二 } 1三 timeNum += WaitSleep; 1四 if (timeNum >= TimeoutTime) 壹5 { 1陆TimeoutFlag = true; 壹7 } 1八 Thread.Sleep(WaitSleep); 1玖 } 主线程,仿Ajax回调等待

  private void RemoteNew(Action<Remoter, string> action) 解析:

亚洲必赢官网 6 一 private
void RemoteNew(Action<Remoter, string> action) 二 { 三 // 4 var
reNum = 0; 伍 for (var i = 0; i < this.RetryCount; i++) 陆 { 七 try 八 {
玖 // 此处省略 十 //… … 1一 1二 // 一3 break; 1四 } 一伍 catch (Exception
ex) 1陆 { 17 Thread.Sleep(this.TrySleep); 1八 reNum++; 1玖 if (reNum ==
this.RetryCount) 20 { 二1 throw new
Exception(string.Format(“重试战败!重试次数:{0}次,败因:{1}”,
this.RetryCount, ex.Message)); 2二 } 23 continue; 二四 } 25 } 26 } 调用UKugaL退步,自动重试机制
亚洲必赢官网 7 1 // 二this.Request.BeginGetResponse((arr) => 叁 { 四 // 伍 var state =
arr.AsyncState as Remoter; 6 // 七 var response =
state.Request.EndGetResponse(arr) as HttpWebResponse; 8 var respStream =
new StreamReader(response.GetResponseStream(),
Encoding.GetEncoding(“UTF-8”)); 玖 action(state, respStream.ReadToEnd());
拾 respStream.Close(); 1一 response.Close(); 1二 }, this); 异步响应回调,闭包与自状态保持

   private void SetResult(Remoter state, string jsonData) 解析:

亚洲必赢官网 81state.Result = jsonData; 2 state.ResponseFlag = true; 异步响应成功后,在情景保持中赋值结果

4、安插中的开源项目…

  
 陈设接二连三会将生产中国化学工业进出口总集团解难点的众多位置集聚成2个连串【Meng.Net.dll】并开源至GitHub上,招待调换,共同提升~~

  至于本文所讲的类会在哪个命名空间中,还没想好,项目的完好布局及主打方向,敬请期待……

 

                                         蒙

                                    2016-09-24
 22:37  周六

 

 

 

            
支付宝打赏:                                   
微信打赏:  

      
亚洲必赢官网 9              
亚洲必赢官网 10

 

一、表达 一) 这么些类 是自己 在真正项目中,优化解决真正难题时,不参照第二方代码,完全…

笔录一下  Jquery使用ajax(post.get及参数详解)

  一) 那一个类 是自己 在真实项目中,优化解决实际难点时,不参照第2方代码,完全由友好查阅MSDN官方文书档案 ,
完毕的叁个实际生产条件中选择的功力类

  壹) 那些类 是本人 在真实项目中,优化解决实际难点时,不参照第1方代码,完全由友好查阅MSDN官方文书档案 ,
落成的三个忠实生产条件中选择的机能类

1、get:

  二) 读者在采纳此类时,请珍爱原创,在代码中增加原创注释://  Author —
Meng.NET (cnblogs.com)  ,同时接待 1次改进、贰次创作 以共同提升

  二) 读者在利用此类时,请尊重原创,在代码中增加原创注释://  Author —
Meng.NET (cnblogs.com)  ,同时招待 一回改良、二回作文 以共同进步

 1 $.ajax({
 2             type: "GET",
 3             url: baseUrl + "Showcontent/del_user?type=1&id=" + id + "&r=" + Math.random(),
 4             async: true,
 5             error: function () {
 6                 alert("Connection error");
 7             },
 8             success: function (data) {
 9                 $("#content").html(data); //data即为后台返回的数据
10             }
11         })

  叁)
此代码以【面向对象】、【C#闭包】、【异步回调】、【超时】、【等待】、【自动重试】格局完毕及实现,且能够布置扩张

  3)
此代码以【面向对象】、【C#闭包】、【异步回调】、【超时】、【等待】、【自动重试】格局达成及完毕,且能够安顿扩张

2.post:

二、代码

二、代码

$.ajax({
        type: "POST",
        url: baseUrl + "Showcontent/modify_user?r=" + Math.random(),
        async: true,
        data: $('#form_add').serialize(),//post参数
        error: function () {
            alert("Connection error");
        },
        success: function (data) {
            $("#content").html(data); //data即为后台返回的数据
        }
    })

  废话不多说,上干货,代码如下:

  废话不多说,上干货,代码如下:

 三、参数解释

亚洲必赢官网 11亚洲必赢官网 12

亚洲必赢官网 13亚洲必赢官网 14

(一)type: 请求格局,默感到GET。一般只用到“GET”,“POST”;类型:string

  1     /// <summary>
  2     /// 异步 Http
  3     /// </summary>
  4     public class Remoter
  5     {
  6         /*
  7          * LM,2016/08/18
  8          * C#闭包化,异步化,Web操作
  9          * 以便支持POS多接口多操作同时使用
 10          */
 11 
 12         /// <summary>
 13         /// 请求地址
 14         /// </summary>
 15         public string URL { get; set; }
 16 
 17         /// <summary>
 18         /// 请求方式
 19         /// </summary>
 20         public string RequestMethod { get; set; }
 21 
 22         /// <summary>
 23         /// 请求数据
 24         /// </summary>
 25         public string JsonContent { get; set; }
 26 
 27         //
 28         private byte[] Buffer { get; set; }        
 29         private Stream RequestStream { get; set; }        
 30         private HttpWebRequest Request { get; set; }        
 31         private bool ResponseFlag { get; set; }        
 32         private string Result { get; set; }        
 33         private bool TimeoutFlag  { get; set; }        
 34         private int TimeoutTime { get; set; }        
 35         private bool RetryFlag { get; set; }        
 36         private int RetryCount  { get; set; }        
 37         private int WaitSleep { get; set; }        
 38         private int TrySleep { get; set; }
 39 
 40         // 初始化
 41         public Remoter()
 42         {
 43             //
 44             ServicePointManager.SecurityProtocol = SecurityProtocolType.Tls | SecurityProtocolType.Ssl3;
 45             ServicePointManager.ServerCertificateValidationCallback = new RemoteCertificateValidationCallback((object sender, X509Certificate certificate, X509Chain chain, SslPolicyErrors errors) => true);
 46 
 47             // 
 48             this.URL = string.Empty;
 49             this.Request = default(HttpWebRequest);
 50             this.JsonContent = string.Empty;
 51             this.Buffer = default(byte[]);
 52             this.RequestStream = default(Stream);
 53             this.ResponseFlag = false;
 54             this.Result = string.Empty;
 55             this.TimeoutFlag = false;
 56             this.TimeoutTime = 10 * 1000;
 57             this.RetryFlag = false;
 58             this.RetryCount = 3;
 59             this.WaitSleep = 10;
 60             this.RequestMethod = "POST";
 61             this.TrySleep = 2000;
 62         }
 63         
 64         /// <summary>
 65         /// 获取响应数据
 66         /// </summary>
 67         public string GetRemoteData()
 68         {
 69             //
 70             if(string.IsNullOrWhiteSpace(this.URL))
 71             {
 72                 throw new Exception("HttpAsync.URL,未赋值!");
 73             }
 74 
 75             // 
 76             RemoteNew(SetResult); 
 77 
 78             //
 79             var timeNum = 0;
 80             while (true)
 81             {
 82                 if (ResponseFlag)
 83                 {
 84                     break;
 85                 }
 86                 if (TimeoutFlag)
 87                 {
 88                     throw new Exception(string.Format("请求超时!超时时间:{0}S", TimeoutTime / 1000));
 89                 }
 90                 timeNum += WaitSleep;
 91                 if (timeNum >= TimeoutTime)
 92                 {
 93                     TimeoutFlag = true;
 94                 }
 95                 Thread.Sleep(WaitSleep);
 96             }
 97 
 98             //
 99             return Result;
100         }
101 
102         // 
103         private void RemoteNew(Action<Remoter, string> action) 
104         {
105             //
106             var reNum = 0;
107             for (var i = 0; i < this.RetryCount; i++)
108             {
109                 try
110                 {
111                     //
112                     var uri = URL;
113 
114                     //
115                     this.Request = WebRequest.Create(uri) as HttpWebRequest;
116                     this.Request.KeepAlive = false;
117                     this.Request.Method = this.RequestMethod;
118                     this.Request.Credentials = CredentialCache.DefaultCredentials;
119                     if (this.RequestMethod.Equals("POST", StringComparison.OrdinalIgnoreCase))
120                     {
121                         this.Buffer = Encoding.UTF8.GetBytes(this.JsonContent);
122                         this.Request.ContentLength = this.Buffer.Length;
123                         this.Request.ContentType = "application/json";
124                         this.RequestStream = this.Request.GetRequestStream();
125                         this.RequestStream.Write(this.Buffer, 0, this.Buffer.Length);
126                         this.RequestStream.Close();
127                     }
128 
129                     //
130                     this.Request.BeginGetResponse((arr) =>
131                     {
132                         //
133                         var state = arr.AsyncState as Remoter;
134                         //
135                         var response = state.Request.EndGetResponse(arr) as HttpWebResponse;
136                         var respStream = new StreamReader(response.GetResponseStream(), Encoding.GetEncoding("UTF-8"));
137                         action(state, respStream.ReadToEnd());
138                         respStream.Close();
139                         response.Close();
140                     }, this);
141                     //
142                     break;
143                 }
144                 catch (Exception ex)
145                 {
146                     Thread.Sleep(this.TrySleep);
147                     reNum++;
148                     if (reNum == this.RetryCount)
149                     {
150                         throw new Exception(string.Format("重试失败!重试次数:{0}次,失败原因:{1}", this.RetryCount, ex.Message));
151                     }
152                     continue;
153                 }
154             }
155         }        
156         private void SetResult(Remoter state, string jsonData)
157         {
158             if (!string.IsNullOrWhiteSpace(jsonData))
159             {
160                 state.Result = jsonData;
161                 state.ResponseFlag = true;
162             }
163         }
164     }
  1     /// <summary>
  2     /// 异步 Http
  3     /// </summary>
  4     public class Remoter
  5     {
  6         /*
  7          * LM,2016/08/18
  8          * C#闭包化,异步化,Web操作
  9          * 以便支持POS多接口多操作同时使用
 10          */
 11 
 12         /// <summary>
 13         /// 请求地址
 14         /// </summary>
 15         public string URL { get; set; }
 16 
 17         /// <summary>
 18         /// 请求方式
 19         /// </summary>
 20         public string RequestMethod { get; set; }
 21 
 22         /// <summary>
 23         /// 请求数据
 24         /// </summary>
 25         public string JsonContent { get; set; }
 26 
 27         //
 28         private byte[] Buffer { get; set; }        
 29         private Stream RequestStream { get; set; }        
 30         private HttpWebRequest Request { get; set; }        
 31         private bool ResponseFlag { get; set; }        
 32         private string Result { get; set; }        
 33         private bool TimeoutFlag  { get; set; }        
 34         private int TimeoutTime { get; set; }        
 35         private bool RetryFlag { get; set; }        
 36         private int RetryCount  { get; set; }        
 37         private int WaitSleep { get; set; }        
 38         private int TrySleep { get; set; }
 39 
 40         // 初始化
 41         public Remoter()
 42         {
 43             //
 44             ServicePointManager.SecurityProtocol = SecurityProtocolType.Tls | SecurityProtocolType.Ssl3;
 45             ServicePointManager.ServerCertificateValidationCallback = new RemoteCertificateValidationCallback((object sender, X509Certificate certificate, X509Chain chain, SslPolicyErrors errors) => true);
 46 
 47             // 
 48             this.URL = string.Empty;
 49             this.Request = default(HttpWebRequest);
 50             this.JsonContent = string.Empty;
 51             this.Buffer = default(byte[]);
 52             this.RequestStream = default(Stream);
 53             this.ResponseFlag = false;
 54             this.Result = string.Empty;
 55             this.TimeoutFlag = false;
 56             this.TimeoutTime = 10 * 1000;
 57             this.RetryFlag = false;
 58             this.RetryCount = 3;
 59             this.WaitSleep = 10;
 60             this.RequestMethod = "POST";
 61             this.TrySleep = 2000;
 62         }
 63         
 64         /// <summary>
 65         /// 获取响应数据
 66         /// </summary>
 67         public string GetRemoteData()
 68         {
 69             //
 70             if(string.IsNullOrWhiteSpace(this.URL))
 71             {
 72                 throw new Exception("HttpAsync.URL,未赋值!");
 73             }
 74 
 75             // 
 76             RemoteNew(SetResult); 
 77 
 78             //
 79             var timeNum = 0;
 80             while (true)
 81             {
 82                 if (ResponseFlag)
 83                 {
 84                     break;
 85                 }
 86                 if (TimeoutFlag)
 87                 {
 88                     throw new Exception(string.Format("请求超时!超时时间:{0}S", TimeoutTime / 1000));
 89                 }
 90                 timeNum += WaitSleep;
 91                 if (timeNum >= TimeoutTime)
 92                 {
 93                     TimeoutFlag = true;
 94                 }
 95                 Thread.Sleep(WaitSleep);
 96             }
 97 
 98             //
 99             return Result;
100         }
101 
102         // 
103         private void RemoteNew(Action<Remoter, string> action) 
104         {
105             //
106             var reNum = 0;
107             for (var i = 0; i < this.RetryCount; i++)
108             {
109                 try
110                 {
111                     //
112                     var uri = URL;
113 
114                     //
115                     this.Request = WebRequest.Create(uri) as HttpWebRequest;
116                     this.Request.KeepAlive = false;
117                     this.Request.Method = this.RequestMethod;
118                     this.Request.Credentials = CredentialCache.DefaultCredentials;
119                     if (this.RequestMethod.Equals("POST", StringComparison.OrdinalIgnoreCase))
120                     {
121                         this.Buffer = Encoding.UTF8.GetBytes(this.JsonContent);
122                         this.Request.ContentLength = this.Buffer.Length;
123                         this.Request.ContentType = "application/json";
124                         this.RequestStream = this.Request.GetRequestStream();
125                         this.RequestStream.Write(this.Buffer, 0, this.Buffer.Length);
126                         this.RequestStream.Close();
127                     }
128 
129                     //
130                     this.Request.BeginGetResponse((arr) =>
131                     {
132                         //
133                         var state = arr.AsyncState as Remoter;
134                         //
135                         var response = state.Request.EndGetResponse(arr) as HttpWebResponse;
136                         var respStream = new StreamReader(response.GetResponseStream(), Encoding.GetEncoding("UTF-8"));
137                         action(state, respStream.ReadToEnd());
138                         respStream.Close();
139                         response.Close();
140                     }, this);
141                     //
142                     break;
143                 }
144                 catch (Exception ex)
145                 {
146                     Thread.Sleep(this.TrySleep);
147                     reNum++;
148                     if (reNum == this.RetryCount)
149                     {
150                         throw new Exception(string.Format("重试失败!重试次数:{0}次,失败原因:{1}", this.RetryCount, ex.Message));
151                     }
152                     continue;
153                 }
154             }
155         }        
156         private void SetResult(Remoter state, string jsonData)
157         {
158             if (!string.IsNullOrWhiteSpace(jsonData))
159             {
160                 state.Result = jsonData;
161                 state.ResponseFlag = true;
162             }
163         }
164     }

(二)url:请求的地点;类型:string

Remoter.cs

Remoter.cs

(3)async:暗许true,true-请求为异步请求,false-请求为同步请求(同步请求将锁住浏览器,用户其余操作必须等 待请求达成才得以施行);类型:bool

  使用格局:

  使用方法:

(4)timeout: 设置请求超时时间(微秒);类型:int

  GET: 

  GET: 

(伍)cache:私下认可为true(当dataType为script时,默以为false); 设置为false将不会从浏览器缓存中加载请求音讯;类型:bool

亚洲必赢官网 15亚洲必赢官网 16

亚洲必赢官网 17亚洲必赢官网 18

(陆)data: 发送到服务器的数目(例:a:”a”,b:”b” 
$(‘#formid’).serialize()自动调换form表单);类型:string

1 var remoter = new Remoter();
2 remoter.RequestMethod = "GET";
3 remoter.URL = "这里是你要请求的URL";
4 var response = remoter.GetRemoteData();
1 var remoter = new Remoter();
2 remoter.RequestMethod = "GET";
3 remoter.URL = "这里是你要请求的URL";
4 var response = remoter.GetRemoteData();

(7)dataType:
预期服务器再次回到的数据类型。借使不点名,JQuery将机关遵照http包mime音讯重返responseXML或responseText,并视作回调函数参数字传送递。);类型:string

View Code

View Code

          可用的种类如下:

  POST:

  POST:

          xml:返回XML文档,可用JQuery处理。

亚洲必赢官网 19亚洲必赢官网 20

亚洲必赢官网 21亚洲必赢官网 22

          html:重临纯文本HTML音讯;包蕴的script标签会在插入DOM时进行。

1 var remoter = new Remoter();
2 remoter.RequestMethod = "POST";
3 remoter.URL = "你要请求的URL";
4 remoter.JsonContent = "你要想URL发送的JSON数据";
5 var response = remoter.GetRemoteData();
1 var remoter = new Remoter();
2 remoter.RequestMethod = "POST";
3 remoter.URL = "你要请求的URL";
4 remoter.JsonContent = "你要想URL发送的JSON数据";
5 var response = remoter.GetRemoteData();

         
script:再次回到纯文本JavaScript代码。不会自行缓存结果。除非设置了cache参数。注目的在于远距离请求

View Code

View Code

                  时(不在同2个域下),全体post请求都将转为get请求。

叁、代码解析

3、代码解析

          json:返回JSON数据。

    public Remoter()
起始化本类,可配置到 App.config/Web.config 中

    public Remoter()
早先化本类,可安插到 App.config/Web.config 中

         
jsonp:JSONP格式。使用SONP格局调用函数时,举例myurl?callback=?,JQuery将机关替换后2个

亚洲必赢官网 23亚洲必赢官网 24

亚洲必赢官网 25亚洲必赢官网 26

                “?”为科学的函数名,以施行回调函数。

 1             // 
 2             this.URL = string.Empty;
 3             this.Request = default(HttpWebRequest);
 4             this.JsonContent = string.Empty;
 5             this.Buffer = default(byte[]);
 6             this.RequestStream = default(Stream);
 7             this.ResponseFlag = false;
 8             this.Result = string.Empty;
 9             this.TimeoutFlag = false;
10             this.TimeoutTime = 10 * 1000;
11             this.RetryFlag = false;
12             this.RetryCount = 3;
13             this.WaitSleep = 10;
14             this.RequestMethod = "POST";
15             this.TrySleep = 2000;
 1             // 
 2             this.URL = string.Empty;
 3             this.Request = default(HttpWebRequest);
 4             this.JsonContent = string.Empty;
 5             this.Buffer = default(byte[]);
 6             this.RequestStream = default(Stream);
 7             this.ResponseFlag = false;
 8             this.Result = string.Empty;
 9             this.TimeoutFlag = false;
10             this.TimeoutTime = 10 * 1000;
11             this.RetryFlag = false;
12             this.RetryCount = 3;
13             this.WaitSleep = 10;
14             this.RequestMethod = "POST";
15             this.TrySleep = 2000;

          text:再次来到纯文本字符串。

可从布署文件读取部分

可从配置文件读取部分

(捌)beforeSend:发送请求前能够修改XMLHttpRequest对象的函数,举个例子增多自定义HTTP头。在beforeSend中1经回去false能够打消此次ajax请求。XMLHttpRequest对象是无比的参数。

  public string U卡宴L
要呼吁的地方

  public string U陆风X八L
要央求的地址

            function(XMLHttpRequest){

  public string
RequestMethod HTTP 动词

  public string
RequestMethod HTTP 动词

               this;   //调用此次ajax请求时传递的options参数

  public string
JsonContent POST 请求时,发送的json数据

  public string
JsonContent POST 请求时,发送的json数据

            }

  private byte[]
Buffer 设置请求流的byte数组

  private byte[]
Buffer 设置请求流的byte数组

(九)complete:请求完毕后调用的回调函数(请求成功或停业时均调用)。参数:XMLHttpRequest对象和3个讲述成功请求类型的字符串。

  private Stream
RequestStream 请求流

  private Stream
RequestStream 请求流

          function(XMLHttpRequest, textStatus){

  private HttpWebRequest
Request HTTP请求对象

  private HttpWebRequest
Request HTTP请求对象

             this;    //调用此番ajax请求时传递的options参数

  private bool
ResponseFlag 与请求对应的响应是还是不是中标标记

  private bool
ResponseFlag 与请求对应的响应是还是不是中标标志

          }

  private string
Result 回调状态保持对象,保存响应结果用

  private string
Result 回调状态保持对象,保存响应结果用

(10)success:请求成功后调用的回调函数,有多少个参数。

  private bool
TimeoutFlag 总超时时间是不是过期标记

  private bool
提姆eoutFlag 总超时时间是还是不是过期标志

         一)由服务器再次回到,并基于dataType参数实行管理后的数量。

  private int
TimeoutTime 总超时时间(包罗若干次重试),暗中同意10s

  private int
TimeoutTime 总超时时间(包罗若干次重试),暗许10s

         二)描述状态的字符串。

  private int
RetryCount 总UBMWX3L调用(退步)自动重试次数,默许3遍

  private int
RetryCount 总U安德拉L调用(失利)自动重试次数,暗许三遍

         function(data, textStatus){

  private int
WaitSleep 主线程,仿Ajax回调等待时间,私下认可拾ms

  private int
WaitSleep 主线程,仿Ajax回调等待时间,暗中认可10ms

            //data可能是xmlDoc、jsonObj、html、text等等

  private int TrySleep
每趟请求地址失利后,重试时间间隔,暗中认可二s

  private int TrySleep
每回请求地址退步后,重试时间距离,暗许二s

            this;  //调用这次ajax请求时传递的options参数

  public string
GetRemoteData()  解析:

  public string
GetRemoteData()  解析:

(1二)error:请求退步时被调用的函数。该函数有3个参数,即XMLHttpRequest对象、错误消息、捕获的一无是处对象(可选)。

亚洲必赢官网 27亚洲必赢官网 28

亚洲必赢官网 29亚洲必赢官网 30

       ajax事件函数如下:

 1             //
 2             var timeNum = 0;
 3             while (true)
 4             {
 5                 if (ResponseFlag)
 6                 {
 7                     break;
 8                 }
 9                 if (TimeoutFlag)
10                 {
11                     throw new Exception(string.Format("请求超时!超时时间:{0}S", TimeoutTime / 1000));
12                 }
13                 timeNum += WaitSleep;
14                 if (timeNum >= TimeoutTime)
15                 {
16                     TimeoutFlag = true;
17                 }
18                 Thread.Sleep(WaitSleep);
19             }
 1             //
 2             var timeNum = 0;
 3             while (true)
 4             {
 5                 if (ResponseFlag)
 6                 {
 7                     break;
 8                 }
 9                 if (TimeoutFlag)
10                 {
11                     throw new Exception(string.Format("请求超时!超时时间:{0}S", TimeoutTime / 1000));
12                 }
13                 timeNum += WaitSleep;
14                 if (timeNum >= TimeoutTime)
15                 {
16                     TimeoutFlag = true;
17                 }
18                 Thread.Sleep(WaitSleep);
19             }

       function(XMLHttpRequest, textStatus, errorThrown){

主线程,仿Ajax回调等待

主线程,仿Ajax回调等待

          //平时状态下textStatus和errorThrown唯有内部1个含有消息

  private void
RemoteNew(Action<Remoter, string> action) 解析:

  private void
RemoteNew(Action<Remoter, string> action) 解析:

          this;   //调用此次ajax请求时传递的options参数

亚洲必赢官网 31亚洲必赢官网 32

亚洲必赢官网 33亚洲必赢官网 34

       }

 1         private void RemoteNew(Action<Remoter, string> action) 
 2         {
 3             //
 4             var reNum = 0;
 5             for (var i = 0; i < this.RetryCount; i++)
 6             {
 7                 try
 8                 {
 9                     // 此处省略
10                     //... ...
11 
12                     //
13                     break;
14                 }
15                 catch (Exception ex)
16                 {
17                     Thread.Sleep(this.TrySleep);
18                     reNum++;
19                     if (reNum == this.RetryCount)
20                     {
21                         throw new Exception(string.Format("重试失败!重试次数:{0}次,失败原因:{1}", this.RetryCount, ex.Message));
22                     }
23                     continue;
24                 }
25             }
26         }                        
 1         private void RemoteNew(Action<Remoter, string> action) 
 2         {
 3             //
 4             var reNum = 0;
 5             for (var i = 0; i < this.RetryCount; i++)
 6             {
 7                 try
 8                 {
 9                     // 此处省略
10                     //... ...
11 
12                     //
13                     break;
14                 }
15                 catch (Exception ex)
16                 {
17                     Thread.Sleep(this.TrySleep);
18                     reNum++;
19                     if (reNum == this.RetryCount)
20                     {
21                         throw new Exception(string.Format("重试失败!重试次数:{0}次,失败原因:{1}", this.RetryCount, ex.Message));
22                     }
23                     continue;
24                 }
25             }
26         }                        

(一三)contentType:当发送音信至服务器时,内容编码类型默感到”application/x-www-form-urlencoded”。该默许值适合大繁多应用场所;类型:string

调用U福睿斯L失败,自动重试机制

调用U陆风X八L战败,自动重试机制

(1肆)dataFilter:给Ajax重返的原有数据举办预管理的函数。

亚洲必赢官网 35亚洲必赢官网 36

亚洲必赢官网 37亚洲必赢官网 38

           
提供data和type八个参数。data是Ajax重回的原来数据,type是调用jQuery.ajax时提供的

 1                     //
 2                     this.Request.BeginGetResponse((arr) =>
 3                     {
 4                         //
 5                         var state = arr.AsyncState as Remoter;
 6                         //
 7                         var response = state.Request.EndGetResponse(arr) as HttpWebResponse;
 8                         var respStream = new StreamReader(response.GetResponseStream(), Encoding.GetEncoding("UTF-8"));
 9                         action(state, respStream.ReadToEnd());
10                         respStream.Close();
11                         response.Close();
12                     }, this);
 1                     //
 2                     this.Request.BeginGetResponse((arr) =>
 3                     {
 4                         //
 5                         var state = arr.AsyncState as Remoter;
 6                         //
 7                         var response = state.Request.EndGetResponse(arr) as HttpWebResponse;
 8                         var respStream = new StreamReader(response.GetResponseStream(), Encoding.GetEncoding("UTF-8"));
 9                         action(state, respStream.ReadToEnd());
10                         respStream.Close();
11                         response.Close();
12                     }, this);

            dataType参数。函数重临的值将由jQuery进一步管理。

异步响应回调,闭包与自状态保持

异步响应回调,闭包与自状态保持

            function(data, type){

   private void
SetResult(Remoter state, string jsonData) 解析:

   private void
SetResult(Remoter state, string jsonData) 解析:

                //重临管理后的多寡

亚洲必赢官网 39亚洲必赢官网 40

亚洲必赢官网 41亚洲必赢官网 42

                return data;

1                 state.Result = jsonData;
2                 state.ResponseFlag = true;
1                 state.Result = jsonData;
2                 state.ResponseFlag = true;

            }

异步响应成功后,在状态保持中赋值结果

异步响应成功后,在气象保持中赋值结果

(一5)global:默感到true。表示是还是不是接触全局ajax事件。设置为false将不会接触全局ajax事件,ajaxStart或ajaxStop可用于控制各类ajax事件;类型:bool

4、布署中的开源项目…

四、安顿中的开源项目…

(1陆)ifModified:默感觉false。仅在服务器数据变动时得到新数据。 服务器数据变动决断的依附是Last-Modified头新闻。暗中同意值是false,即忽略头消息;类型:bool

  
 安排继续会将生育中国化学工业进出口总企业解难题的不少地点汇聚成二个品类【Meng.Net.dll】并开源至GitHub上,应接交换,共同升高~~

  
 布署继续会将生产中国化学工业进出口总公司解难题的繁多地点汇集成二个种类【Meng.Net.dll】并开源至GitHub上,招待交换,共同升高~~

(1柒)jsonp:,在2个jsonp请求中重写回调函数的名字。 该值用来代替在”callback=?”那种GET或POST请求中U牧马人L参数里的”callback”部分;类型:string

  至于本文所讲的类会在哪个命名空间中,还没想好,项目标总体布局及主打方向,敬请期待……

  至于本文所讲的类会在哪些命名空间中,还没想好,项目标完全结构及主打方向,敬请期待……

    举个例子:{jsonp:’onJsonPLoad’}会招致将”onJsonPLoad=?”传给服务器。

 

 

(1捌)username:用于响应HTTP访问认证请求的用户名;类型:string

                                         蒙

                                         蒙

(1九)password:用于响应HTTP访问认证请求的密码;类型:string

                                    2016-09-24
 22:37  周六

                                    2016-09-24
 22:37  周六

(20)processData:默认为true。暗中同意情形下,发送的数额将被撤换为对象(从本领角度来讲不用字符串)以10分默许内容类型”application/x-www-form-urlencoded”;类型:bool

 

 

    假使要发送DOM树音讯照旧其余不期待转变的新闻,请设置为false。

 

 

(二一)scriptCharset:唯有当呼吁时dataType为”jsonp”只怕”script”,并且type是GET时才会用于强制修改字符集(charset)。常常在该地和长途的剧情编码不一致时利用;类型:string

 

 

       

       

                    

                    

 

 

网站地图xml地图