jQuery 調(diào)用WebService 實(shí)例講解
1.首先建一個(gè)WebService程序
/// <summary>
/// WebService1 的摘要說明
/// </summary>
[WebService(Namespace = "http://tempuri.org/")]
[WebServiceBinding(ConformsTo = WsiProfiles.BasicProfile1_1)]
[ToolboxItem(false)]
// 若要允許使用 ASP.NET AJAX 從腳本中調(diào)用此 Web 服務(wù),請(qǐng)取消對(duì)下行的注釋。
[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] 這里得注意,默認(rèn)情況下這個(gè)特性是注釋起來(lái)的,如果想用Javascript來(lái)調(diào)用WebService 就要取消這個(gè)注釋
WebService 的內(nèi)容不必多說,用Jquery調(diào)用WebService 返回肯定是一個(gè)xml。而xml是說明文件,而不是具體方法返回的值,所以我們做適當(dāng)?shù)奶幚?。我們這里WebService方法返回的是JSON數(shù)據(jù),以便在前臺(tái)解析。下載是實(shí)體類序列化JSON的代碼。
2. 實(shí)體對(duì)象序列化JSON
/**
*
* 2009-5-26
* 賀 臣
*
* 將某個(gè)對(duì)象轉(zhuǎn)化為Json數(shù)據(jù)格式
* */
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>
/// 被序列化得實(shí)體對(duì)象
/// </summary>
public object Entity
{
get { return _entity; }
set { _entity = value; }
}
private string _jsonData;
/// <summary>
/// 被轉(zhuǎn)化為json格式數(shù)據(jù)的對(duì)象
/// </summary>
public string JsonData
{
get { return _jsonData; }
set { _jsonData = value; }
}
/// <summary>
/// 無(wú)參數(shù)構(gòu)造方法
/// </summary>
public ObjectSerialization()
{
}
/// <summary>
/// 有參數(shù)構(gòu)造方法
/// </summary>
/// <param name="entity">要被序列化得實(shí)體對(duì)象</param>
public ObjectSerialization(object entity)
{
this._entity = entity;
}
/// <summary>
/// 序列化實(shí)體對(duì)象
/// </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>
/// 序列化實(shí)體對(duì)象
/// </summary>
/// <param name="entity">要被序列化得實(shí)體對(duì)象</param>
/// <returns></returns>
public string EntityToJson(object entity)
{
this._entity = entity;
return EntityToJson();
}
/// <summary>
/// 將Json格式數(shù)據(jù)轉(zhuǎn)換為對(duì)象
/// </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格式數(shù)據(jù)轉(zhuǎn)換為對(duì)象
/// </summary>
/// <param name="jsonData">json數(shù)據(jù)格式</param>
/// <returns></returns>
public T GetObjectJson<T>(string jsonData)
{
this._jsonData = jsonData;
return GetObjectJson<T>();
}
}
}
注意序列化實(shí)體必須用可序列化特性修飾,如Serialiable,否則它不能序列化為JSON數(shù)據(jù)字符串
3.前臺(tái)程序Jquery調(diào)用
<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>
這里進(jìn)入了Jquery的核心文件和一個(gè)JSON2.js文件
url:"http://localhost:10168/WebService1.asmx/HelloWorld" 這個(gè)是調(diào)用WebService方法的路徑,HelloWorld 是WebService 中的方法。
同時(shí)還要設(shè)置WebService請(qǐng)求后返回的參數(shù)格式(json),data是用于解釋返回的值。這里值得注意的是data是一個(gè)json格式的字符串,而且對(duì)象名為d,所以我們用到了后面的var msg=data.d;
如果我們要能夠像JSON那個(gè)以 . 操作來(lái)訪問鍵值,我們就使用到了 JSON2.js 中的方法將 json字符串轉(zhuǎn)化為json對(duì)象,這樣就可以以. 操作來(lái)訪問對(duì)象了。
如果我們需要調(diào)用帶參數(shù)的WebService ,則我們可以再data 中指定傳遞的參數(shù),參數(shù)名要和WebService中方法參數(shù)名相同。
在這里應(yīng)該說是沒有問題,我在寫這個(gè)例子的時(shí)候,并不是這么順利,后來(lái)查了很多關(guān)于WebService的資料,原來(lái)我們要修改WebService中Web.config 的配置,否則我們不能以Url 那種格式訪問WebService。
配置如下:
在System.web 這個(gè)節(jié)點(diǎn)中添加如下配置即可
<webServices> <protocols> <add name="HttpGet"/> <add name="HttpPost"/> </protocols> </webServices>
以上就是本文的全部?jī)?nèi)容,希望能給大家一個(gè)參考,也希望大家多多支持腳本之家。
- ASP.NET使用WebService實(shí)現(xiàn)天氣預(yù)報(bào)功能
- jQuery調(diào)用Webservice傳遞json數(shù)組的方法
- 甩掉ashx和asmx使用jQuery.ajaxWebService請(qǐng)求WebMethod簡(jiǎn)練處理Ajax
- 使用jQuery Ajax 請(qǐng)求webservice來(lái)實(shí)現(xiàn)更簡(jiǎn)練的Ajax
- C# WebService發(fā)布以及IIS發(fā)布
- ASP.NET中基于soaphead的webservice安全機(jī)制
- WebService的相關(guān)概念
相關(guān)文章
jQuery動(dòng)態(tài)添加.active 實(shí)現(xiàn)導(dǎo)航效果代碼思路詳解
這篇文章主要介紹了jQuery動(dòng)態(tài)添加.active 實(shí)現(xiàn)導(dǎo)航效果代碼思路詳解,需要的朋友可以參考下2017-08-08
33個(gè)優(yōu)秀的 jQuery 圖片展示插件分享
這篇文章收集了33個(gè)優(yōu)秀的 jQuery 圖片插件分享給大家。2012-03-03
jQuery實(shí)現(xiàn)首頁(yè)頂部可伸縮廣告特效代碼
一套使用jQuery 插件實(shí)現(xiàn)的廣告特效代碼,其效果類似全屏廣告,打開網(wǎng)頁(yè)后在網(wǎng)頁(yè)的第一屏顯示大幅廣告,停留幾秒后慢慢伸縮至標(biāo)準(zhǔn)小圖片顯示在網(wǎng)頁(yè)預(yù)留位置上,效果非常不錯(cuò),這里推薦給大家。2015-04-04
讓新消息在網(wǎng)頁(yè)標(biāo)題閃爍提示的jQuery代碼
可能有一些站長(zhǎng)會(huì)注意到這樣的效果,到收到的新消息會(huì)閃爍標(biāo)題提示,那么新消息在網(wǎng)頁(yè)標(biāo)題閃爍顯示的效果如何實(shí)現(xiàn),下面有個(gè)不錯(cuò)的示例,感興趣的朋友可以參考下2013-11-11
Jquery動(dòng)態(tài)更改一張位圖的src與Attr的使用
用Jquery想動(dòng)態(tài)更改一張位圖的src發(fā)現(xiàn)css不好用而attr貌似是能操作所有屬性,包括Jquery未封裝的屬性,具體實(shí)現(xiàn)如下,感興趣的朋友可以參考下2013-07-07
jquery ajax jsonp跨域調(diào)用實(shí)例代碼
今天研究了AJAX使用JSONP進(jìn)行跨域調(diào)用的方法,發(fā)現(xiàn)使用GET方式和POST方式都可以進(jìn)行跨域調(diào)用,這里簡(jiǎn)單分享下,方便需要的朋友2013-12-12
jquery插件canvaspercent.js實(shí)現(xiàn)百分比圓餅效果
這篇文章主要為大家詳細(xì)介紹了jquery插件canvaspercent.js實(shí)現(xiàn)百分比圓餅效果,文中示例代碼介紹的非常詳細(xì),具有一定的參考價(jià)值,感興趣的小伙伴們可以參考一下2017-07-07

