多种方式实现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 相关文章推荐
js选择并转移导航菜单示例代码
Aug 19 Javascript
js判断一个字符串是否包含一个子串的方法
Jan 26 Javascript
js判断复选框是否选中及选中个数的实现代码
May 30 Javascript
微信开发之调起摄像头、本地展示图片、上传下载图片实例
Dec 08 Javascript
js实现瀑布流效果(自动生成新的内容)
Mar 16 Javascript
vue-router配合ElementUI实现导航的实例
Feb 11 Javascript
bootstrap模态框关闭后清除模态框的数据方法
Aug 10 Javascript
layui上传图片到服务器的非项目目录下的方法
Sep 26 Javascript
vue模块移动组件的实现示例
May 20 Javascript
解决vue做详情页跳转的时候使用created方法 数据不会更新问题
Jul 24 Javascript
JavaScript canvas实现文字时钟
Jan 10 Javascript
react中useState使用:如何实现在当前表格直接更改数据
Aug 05 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程序报date()警告的处理(date_default_timezone_set)
2013/10/22 PHP
利用谷歌 Translate API制作自己的翻译脚本
2014/06/04 PHP
php发送get、post请求的6种方法简明总结
2014/07/08 PHP
php压缩文件夹最新版
2018/07/18 PHP
Laravel服务容器绑定的几种方法总结
2020/06/14 PHP
Javascript实例教程(19) 使用HoTMetal(5)
2006/12/23 Javascript
背景音乐每次刷新都可以自动更换
2007/02/01 Javascript
javascript中&quot;/&quot;运算符常见错误
2010/10/13 Javascript
JS 获取select(多选下拉)中所选值的示例代码
2013/08/02 Javascript
JavaScript编写带旋转+线条干扰的验证码脚本实例
2016/05/30 Javascript
jquery实现左右轮播切换效果
2018/01/01 jQuery
Angularjs Promise实例详解
2018/03/15 Javascript
使用Vue.js和Flask来构建一个单页的App的示例
2018/03/21 Javascript
vue内置组件transition简单原理图文详解(小结)
2018/07/12 Javascript
解决vue2.0路由跳转未匹配相应用路由避免出现空白页面的问题
2018/08/24 Javascript
js实现星星打分效果
2020/07/05 Javascript
[00:34]TI7不朽珍藏III——地穴编织者不朽展示
2017/07/15 DOTA
python队列通信:rabbitMQ的使用(实例讲解)
2017/12/22 Python
python 获取文件下所有文件或目录os.walk()的实例
2018/04/23 Python
python指定写入文件时的编码格式方法
2018/06/07 Python
python使用xlsxwriter实现有向无环图到Excel的转换
2018/12/12 Python
python函数与方法的区别总结
2019/06/23 Python
pycharm设置鼠标悬停查看方法设置
2019/07/29 Python
使用Rasterio读取栅格数据的实例讲解
2019/11/26 Python
基于python+selenium的二次封装的实现
2020/01/06 Python
django 解决model中类写不到数据库中,数据库无此字段的问题
2020/05/20 Python
Python 如何创建一个线程池
2020/07/28 Python
Python读写csv文件流程及异常解决
2020/10/20 Python
用pip给python安装matplotlib库的详细教程
2021/02/24 Python
上班早退检讨书
2014/01/09 职场文书
党员组织生活会发言材料
2014/10/17 职场文书
出纳年终工作总结2014
2014/12/05 职场文书
优秀团员自我评价
2015/03/10 职场文书
总经理助理岗位职责范本
2015/03/31 职场文书
中小学生安全教育观后感
2015/06/17 职场文书
MySQL普通表如何转换成分区表
2022/05/30 MySQL