多种方式实现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 相关文章推荐
window.showModalDialog使用手册
Jan 11 Javascript
JS定时刷新页面及跳转页面的方法
Jul 04 Javascript
jQuery中:focus选择器用法实例
Dec 30 Javascript
JS实现的自定义显示加载等待图片插件(loading.gif)
Jun 17 Javascript
细数JavaScript 一个等号,两个等号,三个等号的区别
Oct 09 Javascript
js简易版购物车功能
Jun 17 Javascript
vue2项目使用sass的示例代码
Jun 28 Javascript
jQuery Layer弹出层传值到父页面的实现代码
Aug 17 jQuery
浅谈JS 数字和字符串之间相互转化的纠纷
Oct 20 Javascript
解决Angular.js中使用Swiper插件不能滑动的问题
Feb 26 Javascript
vue 表单输入格式化中文输入法异常问题
May 30 Javascript
cnpm加速Angular项目创建的方法
Sep 07 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
苏联队长,苏联超人蝙蝠侠,这些登场的“山寨”英雄真的很严肃
2020/04/09 欧美动漫
PHP+Mysql基于事务处理实现转账功能的方法
2015/07/08 PHP
PHP快速生成各种信息提示框的方法
2016/02/03 PHP
php 判断过去离现在几年的函数(实例代码)
2016/11/15 PHP
PHP基于DateTime类解决Unix时间戳与日期互转问题【针对1970年前及2038年后时间戳】
2018/06/13 PHP
非常漂亮的JS代码经典广告
2007/10/21 Javascript
转换json格式的日期为Javascript对象的函数
2010/07/13 Javascript
推荐10个超棒的jQuery工具提示插件
2011/10/11 Javascript
js中return false(阻止)的用法
2013/08/14 Javascript
JS设置下拉列表框当前所选值的方法
2015/12/22 Javascript
简单的JS控制button颜色随点击更改的实现方法
2017/04/17 Javascript
JS实现图片点击后出现模态框效果
2017/05/03 Javascript
详解Vue微信公众号开发踩坑全记录
2017/08/21 Javascript
vue-router2.0 组件之间传参及获取动态参数的方法
2017/11/10 Javascript
jQuery实现验证表单密码一致性及正则表达式验证邮箱、手机号的方法
2017/12/05 jQuery
vue2.0使用swiper组件实现轮播的示例代码
2018/03/03 Javascript
[41:52]2018DOTA2亚洲邀请赛3月29日 小组赛A组 TNC VS OpTic
2018/03/30 DOTA
Python实现堆排序的方法详解
2016/05/03 Python
在python的类中动态添加属性与生成对象
2016/09/17 Python
详解Python中的正则表达式
2018/07/08 Python
python  创建一个保留重复值的列表的补码
2018/10/15 Python
Django框架文件上传与自定义图片上传路径、上传文件名操作分析
2019/05/10 Python
Python实现制度转换(货币,温度,长度)
2019/07/14 Python
python3 使用traceback定位异常实例
2020/03/09 Python
推荐技术人员一款Python开源库(造数据神器)
2020/07/08 Python
html5教程画矩形代码分享
2013/12/04 HTML / CSS
美国医疗用品、医疗设备和家庭保健用品商店:Medical Supply Depot
2018/07/08 全球购物
Zavvi西班牙:电子游戏、极客服装、Blu-ray、Funko Pop等
2019/05/03 全球购物
YII2 全局异常处理深入讲解
2021/03/24 PHP
大学军训感言800字
2014/02/27 职场文书
小学生三分钟演讲稿
2014/08/18 职场文书
群众路线教育实践活动学习笔记
2014/11/05 职场文书
2014年行风建设工作总结
2014/12/01 职场文书
初中学生操行评语
2014/12/26 职场文书
海上钢琴师观后感
2015/06/03 职场文书
初中政教处工作总结
2015/08/12 职场文书