前台页面通过ajax环境和js调用web service的几种方法
目录:
1.配置ajax环境
2.js中调用web service (ajax环境) 方法一
3.方法二
4.方法三
5.ajax中的错误处理
//6.写的比较快 如果有疏忽之处 如能指出感激不尽。以免误人子弟。
一、使用ajax核心组件webconfi里的配置(可略了)
1.contrlos节配置
tagPrefix:命名空间的别名 也就是空间的前缀
Assembly 指定加载的程序集
PublicKeyToken 程序集的公钥
<pages>
<controls>
<add tagPrefix="asp" namespace="System.Web.UI" assembly="System.Web.Extensions, Version=1.0.61025.0, Culture=neutral, PublicKeyToken=31bf3856ad364e35"/>
</controls>
</pages>
2.httpHandlers节的配置
这里的配置主要针对一些特殊的请求如:ajax请求webservice 和javascript编译文件时。
.asmx 是处理的web服务的文件,扩展名为 。Axd 的http处理则是对封装的javascript文件的处理。
<remove verb="*" path="*.asmx"/>
<add verb="*" path="*.asmx" validate="false" type="System.Web.Script.Services.ScriptHandlerFactory, System.Web.Extensions, Version=1.0.61025.0, Culture=neutral, PublicKeyToken=31bf3856ad364e35"/>
<add verb="*" path="*_AppService.axd" validate="false" type="System.Web.Script.Services.ScriptHandlerFactory, System.Web.Extensions, Version=1.0.61025.0, Culture=neutral, PublicKeyToken=31bf3856ad364e35"/>
<add verb="GET,HEAD" path="ScriptResource.axd" type="System.Web.Handlers.ScriptResourceHandler, System.Web.Extensions, Version=1.0.61025.0, Culture=neutral, PublicKeyToken=31bf3856ad364e35" validate="false"/>
</httpHandlers>
1.在ScriptManageer中指定javascript文件路径,引用webservice时也是在<Script>节点下的<asp:ScriptReFerence>节点添加
<Scripts>
<asp:ScriptReference Path="showDiv.js"/>
</Scripts>
</asp:ScriptManager>
2.调用ajax 的CTP增值组件为: Name为js文件名; Assembly为程序集;
<asp:ScriptReference Assembly="Microsoft.Web.Preview" Name="PreviewScript.js" />
//ScrptManager的主要作用是在客户端注册一些服务器端的代码,如将webservice注册在客户端,从而实现在客户端调用webservice
//js中调用web service (ajax环境) 方法一
1.在项目中引用:
System.Web.Extension
System.Web.Extension.Design
2.在webservice 文件中引用
using System.Web.Script.Services;
3.在webservice中的类前添加 [System.Web.Script.Services.ScriptService]属性
调用页
在<asp:ScriptManagere> 节点下注册如:将webservice注册在客户端
<Services>
<asp:ServiceReference Path="jsWebService.asmx"/>
</Services>
</asp:ScriptManager>
//调用方法
<script type="text/javascript" language="javascript">
function ExeWebservice()
{
//WebService1为webservice的类名 HelloWord该类里的一个方法
//这里的指定的处理方法不带括号和参数
//无参数传入
WebService1.HelloWord(GetResult);
//有参数传入如参数 num num2
var num=0;
var num2=9;
WebService1.HelloWord(num,num2,GetResult);
}
//处理调用webservice返回的方法
function GetResult(str)
{
alert(str);
}
</script>
//前面的 <asp:ServiceReference />节是直接在前台书写 也可以在后台添加 其他的节点也类似方法
protected void AddWebService()
{
//创建服务注册对象
ServiceReference service = new ServiceReference("WevService2.asmx");
//添加到Script节点
//ScriptManager1 是页面文件<ScriptManager/>节点的id 因为他为服务器控件所以可以直接访问
ScriptManager1.Scripts.Add(service);
}
//??在有母板页的情况下 并且母板页中存在ScriptManger 这时内容页如何添加其他的webservice
//这时使用ScriptManageProxy
//一个页面只能有一个ScriptManager;这里的一个页面的意思当页面有母板页时 内容页母板页两者间只能有一个ScriptManager
//不在母板页中调用所有的webservice是为了性能
//用法和ScriptManage完全一样 只不过这个是代理如:
<asp:ScriptManagerProxy ID="ScriptManagerProxy1" runat="server">
<Scripts>
<asp:ScriptReference Path="abcd.asmx" />
</Scripts>
</asp:ScriptManagerProxy>
//在后台中调用和前面使用ScriptManger一样 如这里为 对象id为 ScriptManagerProxy1
//前台js不变
protected void AddWebService()
{
//创建服务注册对象
ServiceReference service = new ServiceReference("WevService2.asmx");
//添加到Script节点
//ScriptManager1 是页面文件<ScriptManager/>节点的id 因为他为服务器控件所以可以直接访问
ScriptManagerProxy1.Scripts.Add(service);
}
//js中调用web service 方法二(在后台声明static方法)
//前提 页面中必须有ajax的<ScriptManager />j节点 并设置EnablePageMethods="true"
//1.建一个普通aspx页
//后台代码
//这里的方法必须为静态
[System.Web.Services.WebMethod]
public static string GetData(string str)
{
return "[" + str + "]";
}
页面代码:
function Button1_onclick()
{
//PageMethods 当前页的PageMethods
//GetData 为后台的静态方法
var name="图图";
PageMethods.GetData(name,Show);
}
function Show(str)
{
alert(str);
}
//可能出现的问题 "PageMethods未定义"或"对象不支持此属性或方法
//1.页面中必须有ajax的<ScriptManager />j节点 并且webconfig里必须配置好了ajax
//2.没有将<ScriptManager /> 节点中的EnableMethods设置为true;
//3.
//js中调用web service 使用异步请求 方法三
<script type="text/javascript" language="javascript">
// <!CDATA[
var xmlhttp;
//创建一个xmlhttp请求对象
//该方法一般浏览器都没有问题
function CreateXMLHttpRequest()
{
if(window.ActiveXObject)//用于ie浏览器
{
xmlhttp=new ActiveXObject("Microsoft.XMLHTTP");
}
else if(window.XMLHttpRequest)//其他浏览器
{
xmlhttp=new xmlHttpRequest();
}
else
alert('创建不了请求对象,没戏了。');
}
//调用webservice的方法
function GetData()
{
//请求的webservice 这里也可以为一般的网址
var url="aaa.asmx?id=3&name='tutu'";
//escape()方法处理中文提交错误 没测试 应该这里也可用
//var url="aaa.asmx?id=3&name=escape("图图")";
// var url="aaa.asmx";
//GET为发送请求的类型
//true 为异步请求
CreateXMLHttpRequest();//20100907 add
xmlhttp.onreadystatechange=ShowData;//20100907 add
xmlhttp.Open("GET","www.aaaa.com?id=3 & name='tutu'",true);
xmlhttp.send();
多说一点
// //1.GET方法
// xmlhttp.Open("GET","www.aaaa.com?id=3 & name='tutu'",true);
// //xmlhttp.send();和xmlhttp.send(null);一样的
// //xmlhttp.send();
// xmlhttp.send(null);
//
// //2.POST方法
// //建议不要用POST方法 这和服务器设置和环境变量有关 不建议用
// xmlhttp.Open("POST","www.aaaa.com?id=3 & name='tutu'",true);
// //xmlhttp.send();和xmlhttp.send(null);一样的
// //xmlhttp.send();
// xmlhttp.send("id=3 &name='tutu'");
//3.GET和POST方法
//GET发送的数据现在在浏览器地址里 当然这里不显示
//GET发送的数据少 POST多
//以前默认get 好像从2.0开始默认为post提交
//在后台取传过来的参数方法不一样。POST 为:Request.Form["id"] GET为:Request.QueryString["id"] 通用的:Request["id"]
}
//处理返回数据的方法
//str
function ShowData()
{
if(xmlhttp.readystate==4 )//异步掉哟娜完成
{
if(xmlhttp.status==200)//html请求执行完成
{
//1.responsetext 返回的是text
//2.responsexml 返回xml 要求服务器响应必须符合xml格式
//3。responsebody 返回body信息
//如果只想返回你后台方法执行的信息 可以将页面文件中除了<%@ Page Language="C#" ContentType="text/html" ResponseEncoding="utf-8" %> 全部删掉
//alert(xmlhttp.responsetext);
retutn xmlhttp.responsetext;
//bytes2BSTR 这是个处理中文乱码的vb方法 可在网上搜一下
//alert(bytes2BSTR(xmlhttp.responsetext));
}
}
}
// ]]>
//调用一下
alert(GetData());
</script>
//Ajax中的错误处理
使用过ajax的就会发现 当发生错误的时候即使我们不捕获 ajax也会已alert的方式弹出显示错误信息
在可视页面上选中ServiceManager控件 F4 打开属性 转到事件 添加AsyncPostBackError事件
//ServiceManager捕获UpdataePanel里发生的错误
//如下 下面的Button1控件在UpdatPanel1里
protected void ScriptManager1_AsyncPostBackError(object sender, AsyncPostBackErrorEventArgs e)
{
//1.打印定义的键值对中的错误信息
//如果取消下面的注释需要+= 否则这里的信息被替换了
if (e.Exception.Data["errornoe"] != null)
{
string errorstr = e.Exception.Data["errorone"].ToString();
ScriptManager1.AsyncPostBackErrorMessage = errorstr;
}
//2。这里即使注掉也会弹出错误信息 就算没有这个事件也会弹出错误提示
//打印原始错误信息
//ScriptManager1.AsyncPostBackErrorMessage = "error:"+e.Exception.Message;
}
protected void Button1_Click(object sender, EventArgs e)
{
//int a = int.Parse("");
try
{
//如果
int a = int.Parse("");
}
catch (Exception ex)
{
//添加一个错误信息
ex.Data["errorone"] = "类型转换错误";
//发出错误信号
throw ex;
}
}
转载于:https://www.cnblogs.com/yueliang/archive/2010/09/06/1819579.html
前台页面通过ajax环境和js调用web service的几种方法相关推荐
- .NET应用程序中异步调用Web Service的几种方法 come from: veryhappy(wx.net)
测试程序界面 图一,调用前界面 图二,调用后界面 详细代码实现 闲言少叙,直接进入主题吧.首先一个声明一个类(将来在客户端与服务器间传递): public class Class1 { ...
- 使用ASP.NET AJAX异步调用Web Service和页面中的类方法(2):处理异步调用中的异常...
本文来自<ASP.NET AJAX程序设计 第II卷:客户端Microsoft AJAX Library相关>的第三章<异步调用Web Service和页面中的类方法>,请同时 ...
- C#之VS2010ASP.NET页面调用Web Service和winform程序调用Web Service
一:用ASP.NET调用Web Service 打开VS2010,打开"文件-新建-网站",选择"ASP.NET网站" 选好存储位置,语言后点击确定,进入默认页 ...
- .NET2.0中,Winform程序如何异步调用Web Service呢?[Demo下载]——与.net1.1环境下比较...
最近在MSDN上看到一个在.NET1.1中Winform程序异步调用WebService的例子 我准备模仿着迁移到.NET2.0环境中,遗憾的是,一切不是那么简单. 首先,.net1.1中调用的Web ...
- iOS: JS和Native交互的两种方法,iosjsnative交互
iOS: JS和Native交互的两种方法,iosjsnative交互 背景: UIWebView: iOS 用来展示 web 端内容的控件. 1. 核心方法: - (NSString*)string ...
- js中当等于最小值是让代码不执行_网页中JS函数自动执行常用三种方法
本文为大家分享了在网页中JS函数自动执行常用方法,供大家参考,具体内容如下 一.JS方法 1.最简单的调用方式,直接写到html的body标签里面: 2.在JS语句调用: function myfun ...
- 在生产环境下处理EFCore数据库迁移的五种方法
在生产环境下处理EFCore数据库迁移的五种方法 原文链接:https://www.thereformedprogrammer.net/handling-entity-framework-core-d ...
- JS数组转字符串(3种方法) arrays.join(“-“)把数组使用-分割为字符串
JS数组转字符串(3种方法) JavaScript 允许数组与字符串之间相互转换.其中 Array 方法对象定义了 3 个方法,可以把数组转换为字符串,如表所示. Array 对象的数组与字符串相互转 ...
- 【javascript基础——系列10】js中隐藏元素的几种方法以及代码
系列文章 [javascript基础--系列1]前端页面ajax连接后台服务器传输数据 [javascript基础--系列2]前端页面axios连接后台服务器传输数据 [javascript基础--系 ...
最新文章
- golang defer使用——资源关闭时候多用
- Json入门及基本应用
- 正向代理服务器和反向代理服务器的区别
- 信息系统项目管理师-信息系统成本管理核心知识点思维脑图
- ospf 实验笔记(二)
- 学会阅读硬件的原理图、数据手册大全
- Android之RecycleView实现指定范围的拖动效果
- 120天的努力,从牵引力教育开始逆袭的!
- java类的扩展注意
- Linux文件解压缩
- 【WebGIS bug】WARNING: Too many active WebGL contexts. Oldest context will be lost.
- 服务器添加打印机显示没有权限,无法连接打印机(没有权限使用网络资源)解决方法和原因...
- ESP32增加文件夹及文件
- 虚拟盘客户机文件盒服务器不一样,VMware ESX三种虚拟磁盘类型分析
- 威漫哨兵机器人_漫威:哨兵机器人能不能打过复仇者联盟?
- 现如今社群乱象,社群玩法正解
- postman传布尔类型的值传不进去
- 基于simulink的双闭环矢量控制的电压型PWM整流器仿真
- Struts原理与实践(文摘)
- 3d打印驱动开启uart有什么用TMC2208如何在Ramps1.4开启uart