客户端异步调用

在客户端使用javascript是希望避免在数据回送过程中引发的页面刷新,对于数据量比较大的页面来说,频繁的整体刷新会降低性能以及客户的使用满意度。异步调用技术使用局部刷新的方式,从而避免了页面的整体刷新。

      客户端回调是实现异步调用局部刷新的一个内置技术,通过简单步骤即可实现。主要在客户端和服务器端做以下操作:

      1 客户端:引发回调。向服务器传递参数,启动服务器函数的执行;接受服务器的返回值,修改客户端界面。
      2 服务器端:处理回调。接受客户端的回调参数;返回一个新的字符串值给客户端。

      客户端:

<html xmlns="http://www.w3.org/1999/xhtml">
<head runat="server">
    
<title>Untitled Page</title>
    
<script language=javascript>
        function button_click()
ExpandedBlockStart.gifContractedBlock.gif        
{
                          var args = document.forms[0]['TextBox1'].value;

                        
//CallBack(args,null);

                       <%= ClientScript.GetCallbackEventReference(this"args""GetResultFromServer""")%>
        }

        function GetResultFromServer(value, context)
ExpandedBlockStart.gifContractedBlock.gif        
{
            alert( value);
        }

    
</script>
</head>
<body>
    
<form id="form1" runat="server">
    
<div>
        Please input your name: 
<asp:TextBox ID="TextBox1" runat="server"></asp:TextBox>
        
<br />
        
<input id="Button2" type="button" value="Aysn Call" onclick="button_click()" />
        
<br />
        
<asp:Button ID="Button1" runat="server" Text="Server Button"/>
    
</div>
    
</form>
</body>
</html>

      button_click函数用于启动回调。必须使用html控件,不能使用Web服务器控件,否则肯定会引起一个新的http post请求,引起页面整体刷新。

      ClientScript.GetCallbackEventReference(this, "args", "GetResultFromServer", "")方法返回一个字符串,该字符串是真正引发回调的客户端脚本函数。函数返回值为“WebForm_DoCallback('__Page',args,GetResultFromServer,"",null,false)”。该函数有多个重写函数,但最终都是调用方法

public   string  GetCallbackEventReference (
    
string  target,                     // 处理客户端回调的服务器 Control 的名称。该控件必须实现 ICallbackEventHandler 接口
     string  argument,                 // 从客户端脚本传递给服务器端的一个参数
     string  clientCallback,           // 一个客户端事件处理程序的名称,该处理程序接收成功的服务器端事件的结果
     string  context,                   // 启动回调之前在客户端计算的客户端脚本。脚本的结果传回客户端事件处理程序。
     string  clientErrorCallback,     // 客户端事件处理程序的名称,该处理程序在服务器端事件处理程序出现错误时接收结果
     bool  useAsync                   // true 表示同步执行回调;false 表示异步执行回调。
)

      GetResultFromServe()接受服务器返回值,并更新界面,实现无刷新更新。      

      服务器端

public   partial   class  Callback : System.Web.UI.Page,ICallbackEventHandler
ExpandedBlockStart.gifContractedBlock.gif
{
    
private string _result;

    
protected void Page_Load(object sender, EventArgs e)
ExpandedSubBlockStart.gifContractedSubBlock.gif    
{
        
//string callRefreence = Page.ClientScript.GetCallbackEventReference(this, "arg", "GetResultFromServer", "context");

        
//string script = "function CallBack(arg,context){" + callRefreence + "}";

        
//Page.ClientScript.RegisterStartupScript(this.GetType(), "callback", script, true);
    }


    
public string GetCallbackResult()
ExpandedSubBlockStart.gifContractedSubBlock.gif    
{
        
return "Hello " + _result;
    }


    
public void RaiseCallbackEvent(string eventArgument)
ExpandedSubBlockStart.gifContractedSubBlock.gif    
{
        
if (string.IsNullOrEmpty(eventArgument))
            _result 
= "you input nothing";
        
else
            _result 
= eventArgument + ", we are from server" ;
    }

}

      实现ICallbackEventHandler,指示该控件能够作为服务器回调事件的目标控件。该接口提供两个方法:
      GetCallbackResult:将结果返回给客户端;
      RaiseCallbackResult:接受客户端参数,并处理服务器端事物逻辑。

      注:在button_click及Page_Load方法中,使用被注释的代码,执行效果相同。

      事件调用顺序是:button_click——〉RaiseCallbackEvent——〉GetCallbackResult——〉GetResultFromSever

转载于:https://www.cnblogs.com/guo11/archive/2009/07/08/1518828.html

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值