jQuery 调用WebService 实例讲解


Posted in Javascript onJune 28, 2016

1.首先建一个WebService程序

/// <summary>
/// WebService1 的摘要说明
/// </summary>
[WebService(Namespace = "http://tempuri.org/")]
[WebServiceBinding(ConformsTo = WsiProfiles.BasicProfile1_1)]
[ToolboxItem(false)]
// 若要允许使用 ASP.NET AJAX 从脚本中调用此 Web 服务,请取消对下行的注释。
[System.Web.Script.Services.ScriptService]
public class WebService1 : System.Web.Services.WebService
{

 [WebMethod]
 public string HelloWorld()
 {
  CommonData.Json.ObjectSerialization ser = new CommonData.Json.ObjectSerialization();
  Student stu = new Student();
  stu.Id = 1;
  stu.Name = "hechen";
  string json = ser.EntityToJson(stu);
  return json;
 }
}

[System.Web.Script.Services.ScriptService] 这里得注意,默认情况下这个特性是注释起来的,如果想用Javascript来调用WebService 就要取消这个注释

WebService 的内容不必多说,用Jquery调用WebService 返回肯定是一个xml。而xml是说明文件,而不是具体方法返回的值,所以我们做适当的处理。我们这里WebService方法返回的是JSON数据,以便在前台解析。下载是实体类序列化JSON的代码。

2. 实体对象序列化JSON

/**
 * 
 * 2009-5-26
 * 贺  臣
 * 
 * 将某个对象转化为Json数据格式
 * */
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.IO;
using System.Data;
using System.ServiceModel.Web;
using System.Runtime.Serialization;
using System.Runtime.Serialization.Json;

namespace CommonData.Json
{
 public class ObjectSerialization
 {
  private object _entity;

  /// <summary>
  /// 被序列化得实体对象
  /// </summary>
  public object Entity
  {
   get { return _entity; }
   set { _entity = value; }
  }

  private string _jsonData;

  /// <summary>
  /// 被转化为json格式数据的对象
  /// </summary>
  public string JsonData
  {
   get { return _jsonData; }
   set { _jsonData = value; }
  }

  /// <summary>
  /// 无参数构造方法
  /// </summary>
  public ObjectSerialization()
  { 
  }

  /// <summary>
  /// 有参数构造方法
  /// </summary>
  /// <param name="entity">要被序列化得实体对象</param>
  public ObjectSerialization(object entity)
  {
   this._entity = entity;
  }


  /// <summary>
  /// 序列化实体对象
  /// </summary>
  /// <returns></returns>
  public string EntityToJson()
  {
   var serializer = new DataContractJsonSerializer(Entity.GetType());
   MemoryStream ms = new MemoryStream();
   serializer.WriteObject(ms, Entity);
   byte[] myByte = new byte[ms.Length];
   ms.Position = 0;
   ms.Read(myByte, 0, (int)ms.Length);
   string dataString = Encoding.UTF8.GetString(myByte);
   return dataString;
  }


  /// <summary>
  /// 序列化实体对象
  /// </summary>
  /// <param name="entity">要被序列化得实体对象</param>
  /// <returns></returns>
  public string EntityToJson(object entity)
  {
   this._entity = entity;
   return EntityToJson();
  }

  /// <summary>
  /// 将Json格式数据转换为对象
  /// </summary>
  /// <returns></returns>
  public T GetObjectJson<T>()
  {
   MemoryStream ms = new MemoryStream(Encoding.UTF8.GetBytes(JsonData));
   var serializer = new DataContractJsonSerializer(typeof(T));
   T t = (T)serializer.ReadObject(ms);
   return t;
  }

  /// <summary>
  /// 将Json格式数据转换为对象
  /// </summary>
  /// <param name="jsonData">json数据格式</param>
  /// <returns></returns>
  public T GetObjectJson<T>(string jsonData)
  {
   this._jsonData = jsonData;
   return GetObjectJson<T>();
  }
 }
}

注意序列化实体必须用可序列化特性修饰,如Serialiable,否则它不能序列化为JSON数据字符串

3.前台程序Jquery调用

<script src="jquery-1[1].2.3.min.js" type="text/javascript"></script>
<script src="json2.js" type="text/javascript"></script>
<script type="text/javascript">
 $(document).ready(function() {
 $("#btnClick").click(function() {
   $.ajax({
    url:"http://localhost:10168/WebService1.asmx/HelloWorld",
    beforeSend: function(x) { 



   x.setRequestHeader("Content-Type", "application/json; charset=utf-8"); 



   },
    data:{},
    dataType:"json",
    type:"POST",
    error: function(x, e) { 




  alert(x.responseText); 



  }, 



 complete: function(x) { 




   //alert(x.responseText); 



    } ,
    success:function(data){
     var msg=data.d;
     var json=JSON2.parse(msg);
     alert(json.id);
    }
   });
   
  });
 });
</script>

这里进入了Jquery的核心文件和一个JSON2.js文件

url:"http://localhost:10168/WebService1.asmx/HelloWorld"  这个是调用WebService方法的路径,HelloWorld 是WebService 中的方法。

同时还要设置WebService请求后返回的参数格式(json),data是用于解释返回的值。这里值得注意的是data是一个json格式的字符串,而且对象名为d,所以我们用到了后面的var msg=data.d;

如果我们要能够像JSON那个以  . 操作来访问键值,我们就使用到了 JSON2.js 中的方法将 json字符串转化为json对象,这样就可以以. 操作来访问对象了。

如果我们需要调用带参数的WebService ,则我们可以再data 中指定传递的参数,参数名要和WebService中方法参数名相同。

在这里应该说是没有问题,我在写这个例子的时候,并不是这么顺利,后来查了很多关于WebService的资料,原来我们要修改WebService中Web.config 的配置,否则我们不能以Url 那种格式访问WebService。

配置如下:

在System.web 这个节点中添加如下配置即可

<webServices>
 <protocols>
 <add name="HttpGet"/>
 <add name="HttpPost"/>
 </protocols>
</webServices>

以上就是本文的全部内容,希望能给大家一个参考,也希望大家多多支持三水点靠木。

Javascript 相关文章推荐
解决Extjs 4 Panel作为Window组件的子组件时出现双重边框问题
Jan 11 Javascript
JavaScript中对象property的读取和写入方法介绍
Dec 30 Javascript
js实现对table动态添加、删除和更新的方法
Feb 10 Javascript
微信小程序 canvas API详解及实例代码
Oct 08 Javascript
JavaScript实现拖拽元素对齐到网格(每次移动固定距离)
Nov 30 Javascript
jQuery动态追加页面数据以及事件委托详解
May 06 jQuery
Vue中定义全局变量与常量的各种方式详解
Aug 23 Javascript
移动端Ionic App 资讯上下循环滚动的实现代码(跑马灯效果)
Aug 29 Javascript
详解微信小程序Page中data数据操作和函数调用
Sep 27 Javascript
解决bootstrap-select 动态加载数据不显示的问题
Aug 10 Javascript
JavaScript Canvas编写炫彩的网页时钟
Oct 16 Javascript
基于vue-cli3和element实现登陆页面
Nov 13 Javascript
关于在Servelet中如何获取当前时间的操作方法
Jun 28 #Javascript
关于JS 预解释的相关理解
Jun 28 #Javascript
checkbox批量选中,获取选中项的值的简单实例
Jun 28 #Javascript
浅谈js中的in-for循环
Jun 28 #Javascript
BootStrap初学者对弹出框和进度条的使用感觉
Jun 27 #Javascript
Jquery和BigFileUpload实现大文件上传及进度条显示
Jun 27 #Javascript
BootStrap Progressbar 实现大文件上传的进度条的实例代码
Jun 27 #Javascript
You might like
PHP生成各种常见验证码和Ajax验证过程
2016/01/10 PHP
js计数器代码
2006/11/04 Javascript
JavaScript中this关键字使用方法详解
2007/03/08 Javascript
在标题栏显示新消息提示,很多公司项目中用到这个方法
2011/11/04 Javascript
JS创建类和对象的两种不同方式
2014/08/08 Javascript
javascript将url中的参数加密解密代码
2014/11/17 Javascript
nodejs 提示‘xxx’ 不是内部或外部命令解决方法
2014/11/20 NodeJs
bootstrap table 服务器端分页例子分享
2015/02/10 Javascript
JavaScript面对国际化编程时的一些建议
2015/06/24 Javascript
JavaScript function函数种类详解
2016/02/22 Javascript
JavaScript数组去重的几种方法效率测试
2016/10/23 Javascript
详解浏览器渲染页面过程
2017/02/09 Javascript
详解angularjs中的隔离作用域理解以及绑定策略
2017/05/31 Javascript
微信小程序视图template模板引用的实例详解
2017/09/20 Javascript
JS实现小星星特效
2019/12/24 Javascript
[01:33:59]真人秀《加油 DOTA》 第六期
2014/09/09 DOTA
Python实现的二维码生成小软件
2014/07/11 Python
python3模块smtplib实现发送邮件功能
2018/05/22 Python
Python列表(List)知识点总结
2019/02/18 Python
Django如何开发简单的查询接口详解
2019/05/17 Python
Pycharm连接远程服务器并实现远程调试的实现
2019/08/02 Python
浅谈pytorch中torch.max和F.softmax函数的维度解释
2020/06/28 Python
Django-imagekit的使用详解
2020/07/06 Python
scrapy框架携带cookie访问淘宝购物车功能的实现代码
2020/07/07 Python
Backcountry旗下的户外商品闪购网站:steep&cheap
2016/09/22 全球购物
Reebonz中国官网:新加坡奢侈品购物网站
2017/03/17 全球购物
优秀本科生求职推荐信
2014/02/24 职场文书
志愿者服务感言
2014/02/27 职场文书
创建市级文明单位实施方案
2014/03/01 职场文书
租房协议书范本
2014/04/09 职场文书
优秀教师先进个人事迹材料
2014/08/31 职场文书
怎样写辞职信
2015/02/27 职场文书
教师节获奖感言
2015/07/31 职场文书
电工生产实习心得体会
2016/01/22 职场文书
基于python定位棋子位置及识别棋子颜色
2021/07/26 Python
Java时间工具类Date的常用处理方法
2022/05/25 Java/Android