打开自己的博客仔细浏览了一番,发现已经好久没有写博客了,由于最近一直比较忙碌懈怠了好多。默默反省三分钟.......言归正传,现在就对最近在学习webservice的过程中遇到的几种类型的问题中我的理解和解决方案。对于webservice大家肯定知道,它是一种使不同站点之间可以相互通信的技术,可以理解为一种接口。一个站点可以通过其它站点提供的webservice接口获得其它站点提供的相应服务。webservice使用起来非常小巧,轻便被很多站点所使用。对于webservice我不做过多说明,webservice的安全问题,如何使webservice更加安全,自己可以查找相关资料自行学习。此次主要讲解使用JQuery请求webservice服务,并且如何处理返回的不同格式的数据。

1.Ajax请求webservice返回DataSet格式数据,以下是测试时编写的webservice服务

      [WebMethod(Description="获得用户DataSet格式数据")]
public DataSet GetUserInfoDataSet()
{
DataSet dataSet= null;
using (SqlConnection conn = new SqlConnection(@"Data Source=.\SQLEXPRESS;Initial CataLog=UserInfo;User Id=sa;Password=123"))
{
conn.Open();
using (SqlCommand cmd = conn.CreateCommand())
{
cmd.CommandText = "select * from Users";
SqlDataAdapter sda = new SqlDataAdapter(cmd);
DataSet ds = new DataSet();
sda.Fill(ds);
dataSet = ds;
}
}
return dataSet;
}

我们可以直接在浏览器中访问该服务观察获得DataSet数据格式是什么样式的,然后通过js操作 结果集中包含了多个Table对象

<NewDataSet xmlns="">
<Table diffgr:id="Table1" msdata:rowOrder="">
<Id></Id>
<UserName>EWR</UserName>
<Age></Age>
<PassWord></PassWord>
<Email>RTRET</Email>
</Table>
<Table diffgr:id="Table2" msdata:rowOrder="">
<Id></Id>
<UserName>ER</UserName>
<Age></Age>
<PassWord></PassWord>
<Email>FDGDF</Email>
</Table>
</NewDataSet>

处理方法:

        function getDataSet()
{
$.ajax({
url: "http://localhost:8793/SoapWebService.asmx/GetUserInfoDataSet",
type: "POST",
data: "{}",
dataType: "xml",
success: function (result) {
var tr = "<tr align='center' style='background:#0094ff;color:white'><td>用户名</td><td>年龄</td><td>密码</td><td>邮箱</td></tr>";
$(result).find("Table").each(function () {
tr += "<tr><td>" + $(this).find("UserName").text() + "</td><td>" + $(this).find("Age").text() + "</td><td>" + $(this).find("PassWord").text() + "</td><td>" + $(this).find("Email").text() + "</td></tr>";
})
document.getElementById("tblist").innerHTML = tr;
},
error: function (result, status) {
if (status == "error") {
alert("数据读取失败");
}
}
})
}

2.Ajax请求webservice返回Json格式数据,在生成Json数据之前 以List<object>泛型集合装载数据。Ajax在请求时注意几个方面,type:“json”,dataType:"application/json;charset=utf-8" 浏览器向服务器发出请求时,会在请求报文中加上这段内容,告诉浏览器,返回数据的格式为Json格式,这句是必不可少的。Json数据中每一行数据都是一个对象.

<ArrayOfUsers xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns:xsd="http://www.w3.org/2001/XMLSchema" xmlns="http://tempuri.org/">
<Users>
<UserName>EWR</UserName>
<Age></Age>
<PassWord></PassWord>
<Email>RTRET</Email>
</Users>
<Users>
<UserName>ER</UserName>
<Age></Age>
<PassWord></PassWord>
<Email>FDGDF</Email>
</Users>
<Users>
</ArrayOfUsers>
        [WebMethod(Description = "获得用户Json格式数据")]
[ScriptMethod(UseHttpGet=false)]
public List<Users> GetUserInfoJson()
{
List<Users> dataJson = null;
using (SqlConnection conn = new SqlConnection(@"Data Source=.\SQLEXPRESS;Initial CataLog=UserInfo;User Id=sa;Password=123"))
{
conn.Open();
using (SqlCommand cmd = conn.CreateCommand())
{
cmd.CommandText = "select * from Users";
SqlDataReader sda = cmd.ExecuteReader();
List<Users> list = new List<Users>();
while (sda.Read())
{
list.Add(new Users { UserName = sda[].ToString(), Age = sda[].ToString(), PassWord = sda[].ToString(),Email=sda[].ToString() });
}
dataJson = list;
}
}
return dataJson;
}

处理方法:

      function GetJson()
{
$.ajax({
type: "post",
url: 'http://localhost:8793/SoapWebService.asmx/GetUserInfoJson',
dataType: 'json',
contentType:"application/json;charset=utf-8",
data: '{}',
async: false,
success: function (result) {
var datas = result.d;
var tr = "<tr align='center' style='background:#0094ff;color:white'><td>用户名</td><td>年龄</td><td>密码</td><td>邮箱</td></tr>";
for (var i = ; i < datas.length; i++) {
tr += "<tr><td>" + datas[i].UserName + "</td><td>" + datas[i].Age + "</td><td>" + datas[i].PassWord + "</td><td>" + datas[i].Email + "</td></tr>";
}
document.getElementById("tblist").innerHTML = tr;
}
});
}

3.Ajax请求webservice返回对象时的处理方法,其实也是一样 将返回的对象以Json数据格式返回

//返回的xml格式数据
<Users xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns:xsd="http://www.w3.org/2001/XMLSchema" xmlns="http://tempuri.org/">
<UserName>jim</UserName>
<Age></Age>
<PassWord></PassWord>
<Email>@qq.com</Email>
</Users>

经过Json格式化后的数据

{"d":{"__type":"_01WebProject.Users","UserName":"jim","Age":"","PassWord":"","Email":"3333@qq.com"}}

处理方法:

  function GetObj() {
$.ajax({
type: "post",
url: 'http://localhost:8793/SoapWebService.asmx/GetUsersObj',
dataType: 'json',
contentType: "application/json;charset=utf-8",
data: '{}',
async: false,
success: function (result) {
var datas = result.d;
var tr = "<tr align='center' style='background:#0094ff;color:white'><td>用户名</td><td>年龄</td><td>密码</td><td>邮箱</td></tr>";
tr += "<tr><td>" + datas.UserName + "</td><td>" + datas.Age + "</td><td>" + datas.PassWord + "</td><td>" + datas.Email + "</td></tr>";
document.getElementById("tblist").innerHTML = tr;
}
});
}

3.Ajax请求webservice返回Hashtable格式数据。

 [WebMethod(Description = "获取Hashtable格式数据")]
public Hashtable GetUserHashtable()
{
Hashtable hash = new Hashtable();
Users user = new Users()
{
UserName = "jim",
Age = "",
PassWord = "",
Email = "3333@qq.com"
};
hash.Add("", user);
return hash;
}

处理方式:

  function GetHashtable()
{
$.ajax({
type: "post",
url: 'http://localhost:8793/SoapWebService.asmx/GetUserHashtable',
dataType: 'json',
contentType: "application/json;charset=utf-8",
data: '{}',
async: false,
success: function (result) {
var datas = result.d[""];
var tr = "<tr align='center' style='background:#0094ff;color:white'><td>用户名</td><td>年龄</td><td>密码</td><td>邮箱</td></tr>";
tr += "<tr><td>" + datas.UserName + "</td><td>" + datas.Age + "</td><td>" + datas.PassWord + "</td><td>" + datas.Email + "</td></tr>";
document.getElementById("tblist").innerHTML = tr;
}
});
}

归纳总结:

总结:

1、JQuery与WebService之间以JSON作为数据交换形式的时候,contentType: "application/json; charset=utf-8"是必须指定的。

要不然WebService不知道以何种数据作为转换。

2、JQuery调用WebService返回复杂数据类型并不一定需要类型为可序列化。

3、WebService返回的JSON数据通过".d"获取如上面测试中的alert(json.d)

JQuery请求WebService返回数据的几种处理方式的更多相关文章

  1. 浅谈WebService返回数据效率对比

    原文链接 http://www.dotnetgeek.cn/xuexiwebservice1.html 一.什么是WebService: 简单通俗来说,就是企业之间.网站之间通过Internet来访问 ...

  2. charles技能之修改请求参数/返回数据(map Local、Rewrite、Breakpoints)

    之前一直用postman调接口比较多,但有时候想要去修改APP的页面展示,造数据又会比较麻烦,此时可以用以下三种方法修改请求参数或修改响应: map Local(本地映射).Breakpoints(打 ...

  3. jQuery异步获取json数据的2种方式

    jQuery异步获取json数据有2种方式,一个是$.getJSON方法,一个是$.ajax方法.本篇体验使用这2种方式异步获取json数据,然后追加到页面. 在根目录下创建data.json文件: ...

  4. springMVC返回数据的四种方式

    转自:https://blog.csdn.net/itcats_cn/article/details/82119673 springMVC返回数据的四种方式:第一种,通过request.setAttr ...

  5. asp.net core 使用中间件拦截请求和返回数据,并对数据进行加密解密。

    原文:asp.net core 使用中间件拦截请求和返回数据,并对数据进行加密解密. GitHub demo https://github.com/zhanglilong23/Asp.NetCore. ...

  6. 使用Typescript重构axios(二十)——请求取消功能:实现第一种使用方式

    0. 系列文章 1.使用Typescript重构axios(一)--写在最前面 2.使用Typescript重构axios(二)--项目起手,跑通流程 3.使用Typescript重构axios(三) ...

  7. Android数据的四种存储方式SharedPreferences、SQLite、Content Provider和File (三) —— SharePreferences

    除了SQLite数据库外,SharedPreferences也是一种轻型的数据存储方式,它的本质是基于XML文件存储key-value键值对数据,通常用来存储一些简单的配置信息.其存储位置在/data ...

  8. Android数据的四种存储方式SharedPreferences、SQLite、Content Provider和File (四) —— ContentProvider

    ContentProvider是安卓平台中,在不同应用程序之间实现数据共享的一种机制.一个应用程序如果需要让别的程序可以操作自己的数据,即可采用这种机制.并且此种方式忽略了底层的数据存储实现,Cont ...

  9. Android数据的四种存储方式SharedPreferences、SQLite、Content Provider和File (二) —— SQLite

    SQLite是一种转为嵌入式设备设计的轻型数据库,其只有五种数据类型,分别是: NULL: 空值 INTEGER: 整数 REAL: 浮点数 TEXT: 字符串 BLOB: 大数据 在SQLite中, ...

随机推荐

  1. python学习笔记(一)元组,序列,字典

    python学习笔记(一)元组,序列,字典

  2. jquery的几个小例子

    <%@ page language="java" contentType="text/html; charset=utf-8" pageEncoding= ...

  3. tail tailf 使用

    tail -f tailf 用来查看日志的新增内容, tailf 能一直打印日志

  4. BZOJ 1563 诗人小G

    Description Input Output 对于每组数据,若最小的不协调度不超过\(10^{18}\),则第一行一个数表示不协调度若最小的不协调度超过\(10^{18}\),则输出"\ ...

  5. GCD - Extreme (II)

    uva11424: 题目:给出n,求gcd(1,2)+gcd(1,3)+gcd(2,3)+gcd(1,4)+gcd(2,4)+gcd(3,4)+...+gcd(1,n)+gcd(2,n)+...+gc ...

  6. IAR FOR ARM 7.2.2破解方法

    直接上图,注意选择"NO" 工具下载地址: http://download.csdn.net/detail/lan120576664/7604593 其实发现,该注册工具连IAR ...

  7. [OpenGL]VS2010配置OpenGL开发环境

    opengl概述 OpenGL(Open Graphics Library)是一个跨编程语言.跨平台的专业图形程序接口. OpenGL是SGI公司开发的一套计算机图形处理系统,是图形硬件的软件接口,任 ...

  8. nodejs触发事件的两种方式

    nodejs触发事件的两种方式: 方式之一:通过实例化events.EventEmitter //引入events模块 var events = require('events'); //初始化eve ...

  9. HDU4681 String(dp)

    题目链接. #include <iostream> #include <cstdio> #include <cstring> #include <cstdli ...

  10. 2015第37周二foxmail邮箱客户端迁移

    foxmail7.0邮箱客户端迁移风波浪费我下午不少时间,不知为何做完foxmail客户端在卡的时候我将其强制关闭,然后将整个邮箱目录拷贝到一台新电脑上,运行客户端居然我要新建账户(账户信息丢失),将 ...