JSONP(JSON with Padding)可以看成是JSON的一种“使用模式”,用以解决“跨域访问”的问题.

下面是一个简单的例子用于模拟如何通过jQuery以JSONP的访问调用一个WCF REST服务。

在这个例子中,我们将定义一个用于返回所有员工信息的服务,

下面是用于表示员工信息的Employee的类型和契约接口。

契约接口IEmployees的GetAll操作用以返回所有员工列表,我们指定了Uri模板并将回复消息格式设置为JSON。

 1: using System.Collections.Generic;2: using System.ServiceModel;3: using System.ServiceModel.Web;4: namespace Artech.WcfServices.Service.Interface5: {6:     [ServiceContract]7:     public interface IEmployees8:     {9:         [WebGet(UriTemplate = "all",ResponseFormat =WebMessageFormat.Json)]      10:         IEnumerable<Employee> GetAll();11:     }12:     public class Employee13:     {14:         public string Id { get; set; }15:         public string Name { get; set; }16:         public string Department { get; set; }17:         public string Grade { get; set; }18:     }19: }

在如下所示的服务类型EmployeesService 中,我们直接让服务操作GetAll返回一个包含3个Employee对象的列表。

   1: using System.Collections.Generic;2: using Artech.WcfServices.Service.Interface;3: namespace Artech.WcfServices.Service4: {5:     public class EmployeesService : IEmployees6:     {7:         public IEnumerable<Employee> GetAll()8:         {9:             return new List<Employee>10:             {11:                 new Employee{ Id = "001", Name="张三", Department="开发部", Grade = "G6"},    12:                 new Employee{ Id = "002", Name="李四", Department="人事部", Grade = "G7"}, 13:                 new Employee{ Id = "003", Name="王五", Department="销售部", Grade = "G8"}14:             };15:         }16:     }17: }

我们通过控制台程序对服务进行寄宿。从下面的配置可以看到我们采用了标准终结点WebHttpEndpoint。

为了让服务具有跨域支持的能力,我们必须将标准终结点的crossDomainScriptAccessEnabled属性设置为True。

WebHttpBinding也具有同名的属性,如果直接使用WebHttpBinding也需要将该属性设置为True。

   1: <configuration>2:   <system.serviceModel>3:     <standardEndpoints>4:       <webHttpEndpoint>5:         <standardEndpoint crossDomainScriptAccessEnabled="true"/>6:       </webHttpEndpoint>7:     </standardEndpoints>8:     <bindings>9:       <webHttpBinding>10:         <binding crossDomainScriptAccessEnabled="true" />11:       </webHttpBinding>12:     </bindings>13:     <services>      14:       <service name="Artech.WcfServices.Service.EmployeesService">15:         <endpoint kind="webHttpEndpoint" 16:                   address="http://127.0.0.1:3721/employees"17:                   contract="Artech.WcfServices.Service.Interface.IEmployees"/>18:       </service>19:     </services>20:   </system.serviceModel>21: </configuration>

在客户端,我们在一个Web页面中通过jQuery进行Ajax调用这个服务,并将得到的员工列表显示在一个表格中。

注意dataType选项设置成“jsonp”而不是“json”。

   1: <!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">2: <html xmlns="http://www.w3.org/1999/xhtml">3:   <head>4:     <title>员工列表</title>5:     <style type="text/css">6:        ...7:     </style>8:     <script src="Scripts/jquery-1.7.1.js" type="text/javascript"></script>9:     <script type="text/javascript">10:         $(function () {11:             $.ajax({12:                 type: "get",13:                 url: "http://127.0.0.1:3721/employees/all",14:                 dataType: "jsonp",15:                 success: function (employees) {16:                     $.each(employees, function (index, value) {17:                         var detailUrl = "detail.html?id=" + value.Id;18:                         var html = "<tr><td>";19:                         html += value.Id + "</td><td>";20:                         html += "<a href='" + detailUrl + "'>" + value.Name + "</a></td><td>";21:                         html += value.Grade + "</td><td>";22:                         html += value.Department + "</td></tr>";23:                         $("#employees").append(html);24:                     });25:                     $("#employees tr:odd").addClass("oddRow");26:                 }27:             });28:         });29:      </script>30:   </head>31:   <body>32:     <table id="employees" width="600px">33:         <tr>34:             <th>ID</th>35:             <th>姓名</th>36:             <th>级别</th>37:             <th>部门</th>38:         </tr>39:     </table>40: </body>41: </html>

转载于:https://www.cnblogs.com/besuccess/articles/3489514.html

jQuery以JSONP的访问调用一个WCF REST服务相关推荐

  1. 使用SoapUI调用安全WCF SOAP服务–第1部分,该服务

    在这个由三部分组成的传奇中,我将演示如何使用SoapUI API工具来调用安全的SOAP服务. 首先,我将专注于创建服务,在接下来的文章中它将充当被测系统. 使用基本身份验证传输安全性机制维护对该服务 ...

  2. Jquery ajax 访问调用带参数的服务方法!

    页面脚本中的写法: $.ajax({url: "http://localhost:3510/WebSite/WebService/ExceptionRecoder.asmx/SetExcep ...

  3. 【转载】一个通过JSONP跨域调用WCF REST服务的例子(以jQuery为例)

    一个通过JSONP跨域调用WCF REST服务的例子(以jQuery为例) JSONP(JSON with Padding)可以看成是JSON的一种"使用模式",用以解决" ...

  4. ajax远程调用,jquery中的ajax方法怎样通过JSONP进行远程调用

    关于JSONP的概念和为什么要使用JSONP网上已经有很多教程,这一节主要演示下在JQUERY中的ajax方法怎样通过JSONP进行远程调用 首先介绍下$.ajax的参数 type:请求方式 GET/ ...

  5. WCF 第一章 基础 完成一个WCF服务客户端

    当需要和服务通信时WCF为客户端提供了丰富的API.通过Service.ServiceModel实现的API处理将.NET类型转换成XML然后从客户端向服务端发送消息.你可以直接用API编程,或者你可 ...

  6. WCF 第一章 基础 为一个ASMX服务实现一个WCF客户端

    WCF客户端可以调用任何基于标准的服务而不用考虑目标宿主环境.在.NET Framework 1.1 上创建的ASMX网络服务是完全兼容的.由WS-I 1.1基本概况定义的标准确保它们可以被WCF调用 ...

  7. 普元EOS中, 子系统和portal不在同一个域中,使用jquery的jsonp来解决portal跨域访问

    转至元数据起始 [背景] 子系统和portal不在同一个域中且项目中要求不能使用nginx.apache等反向代理软件,故使用jsonp从代码角度解决ajax跨域问题 [实现思路] 通过jquery的 ...

  8. java怎么调用另一个类的方法_在一个类中访问另一个类的方法

    在一个类中访问另一个类的方法 由于Java应用程序是由若干个类构成的,因此经常需要在一个类中访问另一个类中的成员和方法,请问应该如何在一个类中访问另一个类的方法?下面是由百分网小编为大家整理的在一个类 ...

  9. 说说JSON和JSONP,也许你会豁然开朗,含jQuery使用jsonp用例

    [原创]说说JSON和JSONP,也许你会豁然开朗,含jQuery用例  前言: 由于Sencha Touch 2这种开发模式的特性,基本决定了它原生的数据交互行为几乎只能通过AJAX来实现. 当然了 ...

最新文章

  1. mysql数据库-主主配置
  2. 生产问题:一个线程罢工的诡异事件
  3. vue从入门到进阶:自定义指令directive,插件的封装以及混合mixins(七)
  4. 『数据库』数据库笔记
  5. (原创)对某国的一次渗透
  6. python 字典组成的列表_python - 合并多列表组成一个字典
  7. java zar_唬人的Java泛型并不难
  8. Redis应用场景汇总
  9. C#(asp.net)实现目录(无扩展名)重写
  10. 大数据技术的特点有哪些
  11. (十) 一起学 Unix 环境高级编程 (APUE) 之 线程控制
  12. python课设带报告_python实时投票系统的课设报告
  13. 基于网易云API做的一个扫码登录
  14. android listview刷新数据库,android – 如何在数据库更改后刷新ListView?
  15. U盘exe病毒解决方案
  16. CAD软件绘图如何提高效率 (下)
  17. 再深一点:如何给女朋友解释什么是微服务?
  18. 几个内核函数:filp_open、filp_read、IS_ERR、ERR_PTR、PTR_ERR
  19. man page 中代号的意思
  20. 07-----给音视频文件添加字幕流

热门文章

  1. linux 进程的执行时间,Linux 获取进程执行时间
  2. 金融工作用计算机吗,为什么计算机专业的人想转金融,而金融专业的想转计算机?...
  3. Windows主机安全加固
  4. You have unstaged changes.
  5. 【C++grammar】析构、友元、拷贝构造函数、深浅拷贝
  6. LeetCode 100. 相同的树 思考分析
  7. 在计算机领域客观事物的属性表示为数据,数据与信息试题解析
  8. 汇编语言-019(汇编程序与c\c++相互调用)
  9. Linux内核设计与实现---虚拟文件系统
  10. php七天登录,十天学会php之第七天