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>

 

 

ContractedBlock.gif ExpandedBlockStart.gif Code
public 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

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值