使用AjaxPro来实现异步加载和同步加载
1.在项目中添加引用,浏览找到AjaxPro.2.dll文件。
2.在Web.config中写入以下代码
<system.web> <httpHandlers> <add path="ajaxpro/*.ashx" verb="POST,GET" type="AjaxPro.AjaxHandlerFactory, AjaxPro.2" /> </httpHandlers> </system.web>
3.在加载事件中,加入
AjaxPro.Utility.RegisterTypeForAjax(typeof(类名));
例如:
public partial class Vacation_UserControl_Optiontour : System.Web.UI.UserControl { protected void Page_Load(object sender, EventArgs e) { AjaxPro.Utility.RegisterTypeForAjax(typeof(Vacation_UserControl_Optiontour)); if (!IsPostBack) { } } }
4.写的方法都要用[AjaxPro.AjaxMethod]开头,然后在写方法,要用public的
例如:
[AjaxPro.AjaxMethod] public string getInfo(Int32 str) { string info = str.ToString(); if (str>0) { Int32 optid = str; DataSet dsinfo = myOptionalDal.GetOptioanlTourByOptioanId(optid); if (dsinfo.Tables[0].Rows.Count > 0 && dsinfo.Tables[0] != null) { info = dsinfo.Tables[0].Rows[0]["Description"].ToString().Replace("<p>", "").Replace("</p>", ""); ; } else { info = "为空"; } } else { info = ""; } return info; }
5.调用时必须写清楚
命名空间名.类名.方法,例:AjaxProExample.Add();
例如:
var i = Vacation_UserControl_Optiontour.getInfo(optionid).value;
6.调用可分两中方法(同步调用,异步调用)
同步调用 :
//在后台写的无参方法 [AjaxPro.AjaxMethod] public string getStr() { return "hello my friends"; } //在后台写的有参方法 [AjaxPro.AjaxMethod] public string getString(string str) { return str + " Say: hello my friends"; }
前台代码:
function SayHello() { var len = arguments.length; //重载 if (len == 0) { var res = AjaxProExample.getStr().value;//同步调用无参 alert(res); } else if (len == 1) { if (arguments[0] == "") { alert("内容不能为空"); } else { var res = AjaxProExample.getString(arguments[0]).value;//同步调用有参 alert(res); } } }
异步调用:
//后台代码 [AjaxPro.AjaxMethod] public int Add(int a, int b) { return a + b; }
//前台代码 function AddNum() { var a = document.getElementById("txt1").value; var b = document.getElementById("txt2").value; if (a == "" || b == "") { alert("请输入合法的数值"); return; } //var res = AjaxProExample.Add(a, b).value; //调用后台代码后直接返回数据,不用显示执行回调函数(同步调用) var res = AjaxProExample.Add(a, b, disp_callback); //调用后台代码后通过回调函数来显示返回的数据(异步调用) } function disp_callback(response) { alert("累计求和: " + response.value); }
7.调用对象
public class PersonInfo { public int Age{get;set;} public string Name{get;set;} public string Sex{get;set;} public PersonInfo(string name,int age,string sex) { Name = name; Age = age; Sex = sex; } }
//后台代码 [AjaxPro.AjaxMethod] public PersonInfo getClass() { PersonInfo p = new PersonInfo("张三", 25, "男"); return p; }
//------------------同步调用对象----------- function Button5_onclick() { var res = AjaxProExample.getClass().value; alert("姓名:" + res.Name + "年龄:" + res.Age + "性别:" + res.Sex); } //------------------异步调用对象----------- function Button6_onclick() { AjaxProExample.getClass(getClassCallBack); } function getClassCallBack(response) { var res = response.value; alert("姓名:" + res.Name + " 年龄:" + res.Age + " 性别:" + res.Sex); }
8.数据集的使用
//后台代码 [AjaxPro.AjaxMethod] public DataTable getData() { DataTable dt = new DataTable(); dt.Columns.Add("Name"); dt.Columns.Add("Telphone"); DataRow dr = dt.NewRow(); dr["Name"] = "李四"; dr["Telphone"] = "189********"; dt.Rows.Add(dr); dr = dt.NewRow(); dr["Name"] = "王五"; dr["Telphone"] = "189*********"; dt.Rows.Add(dr); dr = dt.NewRow(); dr["Name"] = "张三"; dr["Telphone"] = "189*********"; dt.Rows.Add(dr); return dt; }
//前台 function Button7_onclick() { var dataTable = AjaxProExample.getData().value; var strHtml = ""; strHtml += '<table style ="border-collapse:collapse ; border-color:Gray ;" border="1px">'; strHtml += ' <tr>'; strHtml += ' <td>姓名</td>'; strHtml += ' <td>手机号</td>'; strHtml += ' </tr>'; for (var i = 0; i < dataTable.Rows.length; i++) { strHtml += ' <tr>'; strHtml += ' <td>' + dataTable.Rows[i].Name + '</td>'; strHtml += ' <td>' + dataTable.Rows[i].Telphone + '</td>'; strHtml += ' </tr>'; } strHtml += ' </table>'; var divDataTable = document.getElementById("divDataTable");//一个div控件 divDataTable.innerHTML = strHtml; // }