多种方式实现JS调用后台方法进行数据交互


Posted in Javascript onAugust 20, 2013

项目开发过程中很多地方都需要前端和后台的数据交互,几种典型常用的方法如利用控件的AutopostBack属性、Button提交表单等等。但这些都是有条件的,AutoPostBack具有实时性但会刷新页面,Button提交表单不能实现数据交互的实时性。当然说到前台与后台的数据交互更不能漏掉ajax,ajax实现前台与后台数据的异步交互,并且保证实时的、局部刷新。但有些数据不需要异步交互,例如当交互的数据是下一步执行的条件时,就必须要等到数据前台与后台数据交互完成后才能继续执行程序。所以对于掌握js与后台数据交互的方法还是很有必要的。

方法一

后台方法:

<SPAN style="COLOR: #ff0000">// 需要标识为WebMethod</SPAN> 
[System.Web.Services.WebMethod] 
<SPAN style="COLOR: #ff0000">// 注意,要让前台调用的方法,一定要是public和static的</SPAN> 
public static string Say(string name) 
{ 
string result = "Hello:" + name; 
return result; 
}

前台js:
<script type="text/javascript"> 
function btnClick(){ 
PageMethods.Say("you",funReady,funError);<SPAN style="COLOR: #ff6666">//注意js中调用后台方法的方式</SPAN> 
} 
<SPAN style="COLOR: #ff0000">//回调函数, result 就是后台方法返回的数据</SPAN> 
function funReady(result){ 
alert(result); 
} 
<SPAN style="COLOR: #ff0000">//错误处理函数,err 就是后台方法返回的错误信息</SPAN> 
function funError(err){ 
alert("Error:" + err._message ); 
} 
</script> 
<asp:ScriptManagerID="ScriptManager1" runat="server"EnablePageMethods="true" /> 
<inputtype="button" onclick="btnClick()" value="test"/>

方法二

后台方法:

protected string Say(string strCC) 
{ 
strCC = "你好!" + strCC; 
return strCC; 
}

前台js:
function Show() 
{ 
var v = "中国"; 
var s = '<%=Say("'+v+'") %>'; // 你好!“+V+” 
alert(s); 
}<P style="MARGIN: 0in; FONT-FAMILY: Arial; COLOR: #666666; FONT-SIZE: 9pt"><input type="button" onclick="Show()" value="提交" /></P>

方法三

后台方法:

<SPAN style="COLOR: #666666">// 需要标识为WebMethod 
[System.Web.Services.WebMethod] 
// </SPAN><SPAN style="COLOR: #ff0000">注意,要让前台调用的方法,一定要是public和static的</SPAN><SPAN style="COLOR: #666666"> 
public static string Say(string name) 
{ 
string result = "Hello:" + name; 
return result; 
} 
</SPAN>

前台js:
<SPAN style="COLOR: #666666"><script type="text/javascript"> 
function btnClick(){ 
// </SPAN><SPAN style="COLOR: #ff0000">调用页面后台方法,前面跟方法所需的参数,接着是方法回调成功时要执行的js函数,最后一个是方法回调失败时要执行的js函数</SPAN><SPAN style="COLOR: #666666"> 
WebSerCustomer.Say("you",function(ress){//ress就是后台方法返回的数据,Say是webservice WebSerCustomer.axms页面上的方法 
alert(ress) 
}); 
} 
</script> 
<asp:ScriptManager ID="ScriptManager1" runat="server"> 
<Services><asp:ServiceReference Path="~/WebSerCustomer.asmx" /></Services>//WebSerCustomer.asmx后台webservice类的页名称 
</asp:ScriptManager> <input type="button" onclick="btnClick()" value="test" /></SPAN>

总结
对于方法一和方法三来说,标识System.web.Services.webmethod可以声明一个方法可以通过客户端js函数来调用,并且后台方法必须声明为public和static,正是由于要将方法声明为static,使得这两种方法都有局限性,即静态方法中只允许访问静态成员变量。所以要想用这两种方式调用后台方法,后台方法中是不能访问非静态成员变量的。

对于方法二来说,虽然后台方法没有任何限制,但是前台调用的时候由于<%=%>是只读的,前台向后台传的参数实际上是不存在的,即从后台中拿不到。所以方法二适合于调用后台方法经过处理并返回给客户端使用,不适合于将数据传到后台供后台使用。

Javascript 相关文章推荐
popdiv
Jul 14 Javascript
FireBug 调试JS入门教程 如何调试JS
Dec 23 Javascript
javascript面向对象特性代码实例
Jun 12 Javascript
使用js复制链接中的部分文字的方法
Jul 30 Javascript
Bootstrap每天必学之折叠(Collapse)插件
Apr 25 Javascript
Bootstrap整体框架之CSS12栅格系统
Dec 15 Javascript
自制简易打赏功能的实例
Sep 02 Javascript
Vue下拉框回显并默认选中随机问题
Sep 06 Javascript
浅析JavaScript异步代码优化
Mar 18 Javascript
CKeditor4 字体颜色功能配置方法教程
Jun 26 Javascript
详解小程序如何改变onLoad的执行时机
Nov 01 Javascript
JS hasOwnProperty()方法检测一个属性是否是对象的自有属性的方法
Jan 29 Javascript
js获取指定日期前后的日期代码
Aug 20 #Javascript
js 自定义个性下拉选择框示例
Aug 20 #Javascript
JavaScript打印iframe内容示例代码
Aug 20 #Javascript
JQuery之focus函数使用介绍
Aug 20 #Javascript
html页面显示年月日时分秒和星期几的两种方式
Aug 20 #Javascript
网页中可关闭的漂浮窗口实现可自行调节
Aug 20 #Javascript
js判断选择的时间是否大于今天的代码
Aug 20 #Javascript
You might like
php单件模式结合命令链模式使用说明
2008/09/07 PHP
PHP实现多条件查询实例代码
2010/07/17 PHP
php中检查文件或目录是否存在的代码小结
2012/10/22 PHP
php弹出对话框实现重定向代码
2014/01/23 PHP
php实现字符串首字母大写和单词首字母大写的方法
2015/03/14 PHP
PHP实现通过Luhn算法校验信用卡卡号是否有效
2015/03/23 PHP
PHP实现断点续传乱序合并文件的方法
2018/09/06 PHP
如何获取网站icon有哪些可行的方法
2014/06/05 Javascript
javascript实现的一个随机点名功能
2014/08/26 Javascript
使用do...while的方法输入一个月中所有的周日(实例代码)
2016/07/22 Javascript
JS实现图片垂直居中显示小结
2016/12/13 Javascript
jquery插件bootstrapValidator表单验证详解
2016/12/15 Javascript
JS中传递参数的几种不同方法比较
2017/01/20 Javascript
浅谈js使用in和hasOwnProperty获取对象属性的区别
2017/04/27 Javascript
node vue项目开发之前后端分离实战记录
2017/12/13 Javascript
JS使用setInterval实现的简单计时器功能示例
2018/04/19 Javascript
Vue自定义指令封装节流函数的方法示例
2018/07/09 Javascript
NodeJS 文件夹拷贝以及删除功能
2019/09/03 NodeJs
JavaScript中layim之整合右键菜单的示例代码
2021/02/06 Javascript
Python实现TCP/IP协议下的端口转发及重定向示例
2016/06/14 Python
基于ID3决策树算法的实现(Python版)
2017/05/31 Python
深入浅析Python 中 is 语法带来的误解
2019/05/07 Python
对python 调用类属性的方法详解
2019/07/02 Python
python中bytes和str类型的区别
2019/10/21 Python
Python之关于类变量的两种赋值区别详解
2020/03/12 Python
Python中lru_cache的使用和实现详解
2021/01/25 Python
Html5画布_动力节点Java学院整理
2017/07/13 HTML / CSS
*p++ 自增p 还是p所指向的变量
2016/07/16 面试题
俄语翻译实习生的自我评价分享
2013/11/06 职场文书
医院工作检讨书范文
2014/02/10 职场文书
爱国演讲稿500字
2014/05/04 职场文书
支行行长竞聘演讲稿
2014/05/15 职场文书
幸福家庭事迹材料
2014/12/20 职场文书
2019同学聚会主持词
2019/05/06 职场文书
导游词之四川武侯祠
2019/10/21 职场文书
Mysql Show Profile
2021/04/05 MySQL