asp.net ajax回调函数
javascript 調(diào)用后臺類(webservice)的語法:
??????? 類名.方法名(參數(shù)1,參數(shù)2,……,參數(shù)n,回調(diào)函數(shù))
調(diào)用上有兩個差別:一是不需要使用變量接收返回值,二是要在所有參數(shù)后面加一個參數(shù):回調(diào)函數(shù)。
例如,有個類的方法,
在后臺調(diào)用是:
????? string data = Webservice.GetDate(Para1,Para2);
換到前臺JavaScript調(diào)用時,就是如下的樣子:首先引用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?()?{
????????//如果使用設(shè)計的組件,請取消注釋以下行?
????????//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);
}
那么,返回值到哪里去取呢?答案是到回調(diào)函數(shù)中,
??????? 回調(diào)函數(shù)的原型是:回調(diào)函數(shù)名(返回值)
當(dāng)然,存儲返回值變量的名字是開發(fā)人員隨意取的,然后就可以在回調(diào)函數(shù)中使用這個返回值變量了。
例如,接著上面程序,寫一個函數(shù)在文本框中顯示姓名:
function CallBackFunction(result)
{
?? var name=document.getElementById("txtName");
?? txtName.value=result.UserName;
}
則在這個函數(shù)中,result就含有Webservice.Query(Para1,Para2,CallBackFunction)的返回值。
------------------------------------------------------------------------------------------
摘自文章:
????? 為什么不直接調(diào)用類中的方法,而非要經(jīng)過WebService呢?
上文我曾經(jīng)說過,ASP.NET AJAX允許我們直接調(diào)用后臺類中的方法,但是我們不提倡這樣做,而是提倡經(jīng)過WebService的過渡。其原因有如下幾點:
1.要使得某個類可以被JS調(diào)用,也需要在其中做一些修改,如增加一些屬性(Attribute)等,這會對這些類造成一種“污染”。
2.我們知道了,使用ASP.NET AJAX框架也需要從回調(diào)函數(shù)中獲取返回值,而不是直接獲取。考慮以下情況:如果某段JS需要調(diào)用三個后臺方法完成一個操作,那么,就需要寫三個回調(diào)函數(shù)。即要經(jīng)過“調(diào)用第一個方法-第一個回調(diào)函數(shù)中調(diào)用第二個方法-第二個回調(diào)函數(shù)中調(diào)用第三個方法-第三個回調(diào)函數(shù)中取得返回值”。
這個過程很麻煩。而使用WebService后,我們可以將這個三個方法封裝到一個WebService方法里,因為WebService是支持“變量=類名.方法名”這種傳統(tǒng)的調(diào)用方法的。這樣經(jīng)過WebService過渡,JS中只要一個回調(diào)函數(shù)就可以了。
3.從本身特性上看,WebService比普通類更適合作為ASP.NET AJAX的后臺方法。
轉(zhuǎn)載于:https://www.cnblogs.com/hubcarl/archive/2009/09/20/1570542.html
總結(jié)
以上是生活随笔為你收集整理的asp.net ajax回调函数的全部內(nèi)容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: JS检测浏览器是否最大化
- 下一篇: 解析XML文件