為您解碼網(wǎng)站建設(shè)的點(diǎn)點(diǎn)滴滴
發(fā)表日期:2019-09 文章編輯:小燈 瀏覽次數(shù):2044
JSONP(JSON with Padding)可以看成是JSON的一種“使用模式”,用以解決“跨域訪問”的問題,這篇簡(jiǎn)單的文章給出一個(gè)簡(jiǎn)單的例子用于模擬如何通過jQuery以JSONP的訪問調(diào)用一個(gè)WCF REST服務(wù)。[源代碼從這里下載]
在這個(gè)例子中,我們將定義一個(gè)用于返回所有員工信息的服務(wù),下面是用于表示員工信息的Employee的類型和契約接口。契約接口IEmployees的GetAll操作用以返回所有員工列表,我們指定了Uri模板并將回復(fù)消息格式設(shè)置為JSON。
1: using System.Collections.Generic;
2: using System.ServiceModel;
3: using System.ServiceModel.Web;
4: namespace Artech.WcfServices.Service.Interface
5: {
6: [ServiceContract]
7: public interface IEmployees
8: {
9: [WebGet(UriTemplate = "all",ResponseFormat =WebMessageFormat.Json)]
10: IEnumerable<Employee> GetAll();
11: }
12: public class Employee
13: {
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: }
在如下所示的服務(wù)類型EmployeesService 中,我們直接讓服務(wù)操作GetAll返回一個(gè)包含3個(gè)Employee對(duì)象的列表。
1: using System.Collections.Generic;
2: using Artech.WcfServices.Service.Interface;
3: namespace Artech.WcfServices.Service
4: {
5: public class EmployeesService : IEmployees
6: {
7: public IEnumerable<Employee> GetAll()
8: {
9: return new List<Employee>
10: {
11: new Employee{ Id = "001", Name="張三", Department="開發(fā)部", Grade = "G6"},
12: new Employee{ Id = "002", Name="李四", Department="人事部", Grade = "G7"},
13: new Employee{ Id = "003", Name="王五", Department="銷售部", Grade = "G8"}
14: };
15: }
16: }
17: }
我們通過控制臺(tái)程序?qū)Ψ?wù)進(jìn)行寄宿。從下面的配置可以看到我們采用了標(biāo)準(zhǔn)終結(jié)點(diǎn)WebHttpEndpoint。為了讓服務(wù)具有跨域支持的能力,我們必須將標(biāo)準(zhǔn)終結(jié)點(diǎn)的crossDomainScriptAccessEnabled屬性設(shè)置為True。WebHttpBinding也具有同名的屬性,如果直接使用WebHttpBinding也需要將該屬性設(shè)置為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>
在客戶端,我們?cè)谝粋€(gè)Web頁(yè)面中通過jQuery進(jìn)行Ajax調(diào)用這個(gè)服務(wù),并將得到的員工列表顯示在一個(gè)表格中。出CSS之外的頁(yè)面代碼如下所示,需要注意的是在進(jìn)行Ajax調(diào)用的使用將dataType選項(xiàng)設(shè)置成“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>級(jí)別</th>
37: <th>部門</th>
38: </tr>
39: </table>
40: </body>
41: </html>
當(dāng)服務(wù)啟動(dòng)后在瀏覽器中顯示上面這個(gè)Web頁(yè)面,會(huì)得到如下所示的員工列表。
日期:2018-04 瀏覽次數(shù):6832
日期:2017-02 瀏覽次數(shù):3504
日期:2017-09 瀏覽次數(shù):3739
日期:2017-12 瀏覽次數(shù):3587
日期:2018-12 瀏覽次數(shù):4896
日期:2016-12 瀏覽次數(shù):4653
日期:2017-07 瀏覽次數(shù):13701
日期:2017-12 瀏覽次數(shù):3578
日期:2018-06 瀏覽次數(shù):4330
日期:2018-05 瀏覽次數(shù):4509
日期:2017-12 瀏覽次數(shù):3619
日期:2017-06 瀏覽次數(shù):4041
日期:2018-01 瀏覽次數(shù):4011
日期:2016-12 瀏覽次數(shù):3970
日期:2018-08 瀏覽次數(shù):4481
日期:2017-12 瀏覽次數(shù):3787
日期:2016-09 瀏覽次數(shù):6548
日期:2018-07 瀏覽次數(shù):3270
日期:2016-12 瀏覽次數(shù):3288
日期:2018-10 瀏覽次數(shù):3441
日期:2018-10 瀏覽次數(shù):3547
日期:2018-09 瀏覽次數(shù):3636
日期:2018-02 瀏覽次數(shù):3661
日期:2015-05 瀏覽次數(shù):3584
日期:2018-09 瀏覽次數(shù):3368
日期:2018-06 瀏覽次數(shù):3493
日期:2017-02 瀏覽次數(shù):3932
日期:2018-02 瀏覽次數(shù):4396
日期:2018-02 瀏覽次數(shù):4258
日期:2016-12 瀏覽次數(shù):3631
Copyright ? 2013-2018 Tadeng NetWork Technology Co., LTD. All Rights Reserved.