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 相关文章推荐
jquery getScript动态加载JS方法改进详解
Nov 15 Javascript
关于IE BUG与字符串截取substr的解决办法
Apr 10 Javascript
jquery 显示*天*时*分*秒实现时间计时器
May 07 Javascript
jQuery中wrapAll()方法用法实例
Jan 16 Javascript
JS 根据子网掩码,网关计算出所有IP地址范围示例
Apr 23 Javascript
javascript 实现文本使用省略号替代(超出固定高度的情况)
Feb 21 Javascript
在JS中如何把毫秒转换成规定的日期时间格式实例
May 11 Javascript
Vue.js组件实现选项卡以及切换特效
Jul 24 Javascript
使用kbone解决Vue项目同时支持小程序问题
Nov 08 Javascript
JS如何在不同平台实现多语言方式
Jul 16 Javascript
原生js实现自定义滚动条组件
Jan 20 Javascript
React四级菜单的实现
Apr 08 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
再次研究下cache_lite
2007/02/14 PHP
PHP安全配置详细说明
2011/09/26 PHP
PHP实现基于mysqli的Model基类完整实例
2016/04/08 PHP
详谈PHP面向对象中常用的关键字和魔术方法
2017/02/04 PHP
PHP7实现和CryptoJS的AES加密方式互通示例【AES-128-ECB加密】
2019/06/08 PHP
国外的为初学者写的JavaScript教程
2008/06/09 Javascript
在IE6下发生Internet Explorer cannot open the Internet site错误
2010/06/21 Javascript
Extjs中ComboBoxTree实现的下拉框树效果(自写)
2013/05/28 Javascript
jquery ajax修改全局变量示例代码
2013/11/08 Javascript
JavaScript中数组成员的添加、删除介绍
2014/12/30 Javascript
JavaScript中的slice()方法使用详解
2015/06/06 Javascript
对于jQuery性能的一些优化建议
2015/08/13 Javascript
JavaScript中Date对象的常用方法示例
2015/10/24 Javascript
jQuery.ajax 跨域请求webapi设置headers的解决方案
2016/08/08 Javascript
jquery 动态合并单元格的实现方法
2016/08/26 Javascript
javascript入门之数组[新手必看]
2016/11/21 Javascript
利用npm 安装删除模块的方法
2018/05/15 Javascript
JS实现自定义弹窗功能
2018/08/08 Javascript
[43:35]TI4 循环赛第二日Liquid vs Fnatic
2014/07/11 DOTA
[58:59]完美世界DOTA2联赛PWL S3 access vs CPG 第一场 12.13
2020/12/16 DOTA
Python使用CMD模块更优雅的运行脚本
2015/05/11 Python
python生成式的send()方法(详解)
2017/05/08 Python
Python数据集切分实例
2018/12/08 Python
在Django中预防CSRF攻击的操作
2020/03/13 Python
Python2.7:使用Pyhook模块监听鼠标键盘事件-获取坐标实例
2020/03/14 Python
ECOSUSI官网:女式皮革背包
2019/09/27 全球购物
Android笔试题总结
2014/11/29 面试题
通信专业个人自我鉴定
2013/10/21 职场文书
数据管理员的自我评价分享
2013/11/15 职场文书
简历里的自我评价范文
2014/02/24 职场文书
出纳试用期自我鉴定
2014/04/07 职场文书
纪念九一八事变演讲稿1000字
2014/09/14 职场文书
2014年幼儿园安全工作总结
2014/11/10 职场文书
2015年大学生社会实践评语
2015/03/26 职场文书
中学感恩教育活动总结
2015/05/05 职场文书
工作感想范文
2015/08/07 职场文书