asp.net ajax回调函数
javascript 調用后臺類(webservice)的語法:
??????? 類名.方法名(參數1,參數2,……,參數n,回調函數)
調用上有兩個差別:一是不需要使用變量接收返回值,二是要在所有參數后面加一個參數:回調函數。
例如,有個類的方法,
在后臺調用是:
????? string data = Webservice.GetDate(Para1,Para2);
換到前臺JavaScript調用時,就是如下的樣子:首先引用webservice 如:
????? <asp:ScriptManager ID="ScriptManager1" runat="server" >
??????????? <Services>
??????????????? <asp:ServiceReference Path="Userwebservice.asmx" />
??????????? </Services>
??????? </asp:ScriptManager>
?
?
Codepublic?class?UserWebService?:?System.Web.Services.WebService?{
????????public?UserWebService?()?{
????????//如果使用設計的組件,請取消注釋以下行?
????????//InitializeComponent();?
????}
?????public?class?User
????{
????????public?User(int?id,?string?name)
????????{
????????????this.UserId?=?id;
????????????this.UserName?=?name;
????????????
????????}
????????private?int?_userId;
????????public?int?UserId
????????{
????????????get?{?return?_userId;?}
????????????set?{?_userId?=?value;?}
????????}
????????private?string?_userName;
????????public?string?UserName
????????{
????????????get?{?return?_userName;?}
????????????set?{?_userName?=?value;?}
????????}
?????
????}
?????public??DataSet?QueryUserInfo(string?commandText)
????{
????????using?(OleDbConnection?conn?=?new?OleDbConnection(StrCon))
????????{
????????????using?(OleDbDataAdapter?sda?=?new?OleDbDataAdapter(commandText,?conn))
????????????{
????????????????using?(DataSet?ds?=?new?DataSet())
????????????????{
????????????????????sda.Fill(ds);
????????????????????return?ds;
????????????????}
????????????}
????????}
????}
????[WebMethod]
????public??User?Query(int?Id)
????{
????????string?commandText?=?"Select?*?from?User?where?userId="?+?Id;
????????DataTable?dt?=?QueryUserInfo(commandText).Tables[0];
????????User?user?=?new?User(int.Parse(dt.Rows[0][0].ToString()),dt.Rows[0][1].ToString());
????????return?user;
????}
???}
?
?function GetName()
{
? ? var select=document.getElementById("ddlstUser");
??? var empid=select.options[select.selectedIndex].value;??
????Webservice.Query(id,CallBackFunction);
}
那么,返回值到哪里去取呢?答案是到回調函數中,
??????? 回調函數的原型是:回調函數名(返回值)
當然,存儲返回值變量的名字是開發人員隨意取的,然后就可以在回調函數中使用這個返回值變量了。
例如,接著上面程序,寫一個函數在文本框中顯示姓名:
function CallBackFunction(result)
{
?? var name=document.getElementById("txtName");
?? txtName.value=result.UserName;
}
則在這個函數中,result就含有Webservice.Query(Para1,Para2,CallBackFunction)的返回值。
------------------------------------------------------------------------------------------
摘自文章:
????? 為什么不直接調用類中的方法,而非要經過WebService呢?
上文我曾經說過,ASP.NET AJAX允許我們直接調用后臺類中的方法,但是我們不提倡這樣做,而是提倡經過WebService的過渡。其原因有如下幾點:
1.要使得某個類可以被JS調用,也需要在其中做一些修改,如增加一些屬性(Attribute)等,這會對這些類造成一種“污染”。
2.我們知道了,使用ASP.NET AJAX框架也需要從回調函數中獲取返回值,而不是直接獲取。考慮以下情況:如果某段JS需要調用三個后臺方法完成一個操作,那么,就需要寫三個回調函數。即要經過“調用第一個方法-第一個回調函數中調用第二個方法-第二個回調函數中調用第三個方法-第三個回調函數中取得返回值”。
這個過程很麻煩。而使用WebService后,我們可以將這個三個方法封裝到一個WebService方法里,因為WebService是支持“變量=類名.方法名”這種傳統的調用方法的。這樣經過WebService過渡,JS中只要一個回調函數就可以了。
3.從本身特性上看,WebService比普通類更適合作為ASP.NET AJAX的后臺方法。
轉載于:https://www.cnblogs.com/hubcarl/archive/2009/09/20/1570542.html
總結
以上是生活随笔為你收集整理的asp.net ajax回调函数的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: JS检测浏览器是否最大化
- 下一篇: asp.net ajax控件工具集 Au