2012年10月22日星期一

jQuery跨域调用WebService

jQuery跨域调用WebService

html:

<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd"><html "http://www.w3.org/1999/xhtml"><head runat="server">    <title>jquery跨域调用WebService(getJson)</title>    <style type="text/css">        *        {            font: 12px 宋体;            margin: 0px;            padding: 0px;        }        body        {            padding: 5px;        }        #container .search        {            height: 20px;        }        #container .result        {            margin-top: 5px;        }        #txtUserName        {            float: left;        }        #btnSearch        {            float: left;            margin: 0px 0px 0px 5px;            width: 78px;            height: 16px;            text-align: center;            line-height: 16px;            background-color: #eee;            border: solid 1px #BABABA;            cursor: pointer;        }        #btnSearch:hover        {            width: 76px;            height: 14px;            line-height: 14px;            background-color: #fff;            border-width: 2px;        }        .mark        {            color: Blue;        }    </style>    <script src="Scripts/jquery-1.4.1.min.js" type="text/javascript"></script>    <script type="text/javascript">        //用户信息(全局)        var userData = {            //WebServices地址(GetUserList=方法名称,?jsoncallback=?--必须包含)            requestUrl: "http://localhost:54855/PersonalServices.asmx/GetUserList?jsoncallback=?",            //方法参数(用户名可用","分隔开来查询多个用户信息)            requestParams: { userName: null },            //回调函数            requestCallBack: function (json) {                if (json.ResponseStatus == 1) {//成功获取数据                    var addRow = function (key, value) {                        return "<span>" + key + ":</span><span class=\"mark\">" + value + "</span><br/>";                    }                    userData.resultData = json.ResponseData;                    var resultHtml = "";                    $(userData.resultData).each(function () {                        resultHtml += addRow("姓名", this.Name);                        resultHtml += addRow("年龄", this.Age);                        resultHtml += addRow("性别", this.Sex);                        resultHtml += addRow("备注", this.Remark);                        resultHtml += "<br/>";                    });                    $(".result").html(resultHtml);                } else $(".result").html(json.ResponseDetails); //无数据或者后台处理失败!            },            //查询得到的数据            resultData: null        };        $(function () {            //绑定文本框的键盘事件            $("#txtUserName").keyup(function () {                if ($.trim($(this).val()) == "") {                    $(".result").html("请输入查询用户名!");                } else {                    userData.requestParams.userName = $(this).val();                    $(".result").html("");                }            });            //绑定查询按钮单机事件            $("#btnSearch").click(function () {                if (userData.requestParams.userName) {                    $.getJSON(userData.requestUrl, userData.requestParams, userData.requestCallBack);                }            });        });    </script></head><body>    <form id="form1" runat="server">    <div id="container">        <div >            <input type="text" id="txtUserName" /><div id="btnSearch">                查 询</div>        </div>        <div >        </div>    </div>    </form></body></html>

WebServices.cs

using System;using System.Collections.Generic;using System.Web;using System.Web.Services;#region 命名空间using Newtonsoft.Json;#endregionnamespace WebService{    /// <summary>    /// PersonalServices 的摘要说明    /// </summary>    [WebService(Namespace = "http://tempuri.org/")]    [WebServiceBinding(ConformsTo = WsiProfiles.BasicProfile1_1)]    [System.ComponentModel.ToolboxItem(false)]    public class PersonalServices : System.Web.Services.WebService    {        #region 获取用户信息        [WebMethod]        public void GetUserList(string userName)        {            List<Personal> m_PersonalList = new List<Personal>();            string[] strArr = userName.Split(',');            foreach (string item in strArr)            {                Personal m_Personal = GetUserByName(item);                if (m_Personal != null)                {                    m_PersonalList.Add(m_Personal);                }            }            ResponseResult responseResult = new ResponseResult();            if (m_PersonalList.Count == 0)            {                responseResult.ResponseDetails = "没有查到该用户!";                responseResult.ResponseStatus = 0;            }            else            {                responseResult.ResponseData = m_PersonalList;                responseResult.ResponseDetails = "查询用户信息成功!";                responseResult.ResponseStatus = 1;            }            string jsoncallback = HttpContext.Current.Request["jsoncallback"];            //返回数据的方式            //  其中将泛型集合使用了Json库(第三方序列json数据的dll)转变成json数据字符串            string result = jsoncallback + "(" + JsonConvert.SerializeObject(responseResult, Formatting.Indented) + ")";            HttpContext.Current.Response.Write(result);            HttpContext.Current.Response.End();        }        #endregion        #region 模拟数据库处理结果        /// <summary>        /// 根据用户名查询用户        /// </summary>        /// <param name="userName">用户名</param>        /// <returns></returns>        Personal GetUserByName(string userName)        {            List<Personal> m_PersonalList = new List<Personal>();            m_PersonalList.Add(new Personal()            {                Id = "01",                Name = "liger_zql",                Sex = "男",                Age = 21,                Remark = "你猜......"            });            m_PersonalList.Add(new Personal()            {                Id = "02",                Name = "漠然",                Sex = "女",                Age = 22,                Remark = "猜不透......"            });            foreach (Personal m_Personal in m_PersonalList)            {                if (m_Personal.Name == userName)                {                    return m_Personal;                }            }            return null;        }        #endregion        #region json数据序列化所需类        /// <summary>        /// 处理信息类        ///     ResponseData--输出处理数据        ///     ResponseDetails--处理详细信息        ///     ResponseStatus--处理状态        ///         -1=失败,0=没有获取数据,1=处理成功!        /// </summary>        class ResponseResult        {            public List<Personal> ResponseData { get; set; }            public string ResponseDetails { get; set; }            public int ResponseStatus { get; set; }        }        /// <summary>        /// 用户信息类        /// </summary>        class Personal        {            public string Id { get; set; }            public string Name { get; set; }            public int Age { get; set; }            public string Sex { get; set; }            public string Remark { get; set; }        }        #endregion    }}

WebService项目配置文件

<system.web>    <!--提供Web服务访问方式-->    <webServices>      <protocols>        <add name="HttpSoap"/>        <add name="HttpPost"/>        <add name="HttpGet"/>        <add name="Documentation"/>      </protocols>    </webServices></system.web>

由于使用jquery.getJson的方式调用Web服务后,传递中文时会造成中文乱码问题:

所以在配置文件中应配置如下内容:

<system.web>    <!-- 设定传参乱码问题 -->    <globalization fileEncoding="utf-8" requestEncoding="utf-8" responseEncoding="utf-8"/></system.web>

调用截图如下:

最后附上源码:JqCrossDomain.zip


TAG: