//webForm中使用异步就会用到一般处理程序,前台调用一般处理程序这个页面去执行里面的方法
using System.Web.Script.Serialization;
Newtonsoft.Json.dll 需要自己下载这个dll,下面的Newtonsoft.Json.JsonConvert.SerializeObject才能使用,省市区三级联动里面有这个dll.
//后台 一般处理程序
JavaScriptSerializer java = new JavaScriptSerializer(); //序列化 主要返回字符串,整型等等 context.Response.ContentType = "text/plain"; BLL.Boda_Department DepartmentBLL = new BLL.Boda_Department(); DataSet ds = DepartmentBLL.GetList(" BodiesID='" + UserModel.BodiesID + "'"); java.MaxJsonLength = int.MaxValue; context.Response.Write(Newtonsoft.Json.JsonConvert.SerializeObject(ds.Tables[0])); //返回一张省的表格
//前台
$.ajax({ type: "Post", url: "CommunityHandler.ashx", //访问处理程序 dataType: "json", //类型 data: "", //参数 async: false, //false为同步,ture为异步(默认为true) success: function (data) { //data就是序列化的表格 var GetData = eval(data); //转个型 GetData就是我们的表 $.each(GetData, function (i, item) { $("#Sheng" + Id + "").append("<option value=" + item.dm + ">" + item.ct + "</option>"); //dm,ct都是表里面的字段 }); //GetData是需要循环的集合, i个数,item每一项 } });
同步异步区别
async. 默认是true,即为异步方式,$.ajax执行后,会继续执行ajax后面的脚本,直到服务器端返回数据后,触发$.ajax里的success方法,这时候执行的是两个线程。若要将其设置为false
,则所有的请求均为同步请求,在没有返回值之前,同步请求将锁住浏览器,用户其它操作必须等待请求完成才可以执行。
下面查看一个示例:
var temp; $.ajax({ async: false, type : "post", url : defaultpostdata.url, datatype : 'json', success : function(data) { temp=data; } }); alert(temp);
这个ajax请求为同步请求,在没有返回值之前,alert(temp)是不会执行的。
如果async设置为:true,则不会等待ajax请求返回的结果,会直接执行ajax后面的语句。
总结:异步会先执行ajax后面的语句,等后面的语句执行完了,最后再来执行success方法里面的(也就是把这个程序分为两部分,执行ajax后不会等结果,相当于分了一个线程去执行ajax部分,即为异步)
同步则会等待ajax执行,全部执行完再执行后面的语句,就跟后台程序一样,从上到下一条条的语句执行。