zoukankan      html  css  js  c++  java
  • SPServices介绍之三:使用SPSerivces对象调用Web Service

    SPServices介绍之三:使用SPSerivces对象调用Web Service

    分类: SPSerivces
    在上一篇文章SPServices介绍之二中,介绍了一些SPServices的基本方法,除了这些方法,SPServices的主要用处是使用Ajax方法调用SharePoint提供的Web Service。

    先看一下语法:

    [javascript] view plaincopy在CODE上查看代码片派生到我的代码片
     
    1. $().SPServices({  
    2.     operation: "operationname",  
    3.     [webURL: "/sitepath",]  
    4.     [option1: value1,]  
    5.     [option2: value2,]  
    6.     [async: false,]  
    7.     completefunc: function (xData, Status) {  
    8.         ...do stuff...  
    9.     }  
    10. });  

    其中:

    operation用来指定Web Service 方法的名字,例如最常用的Lists Web Services中的GetListItems方法,用来获取列表中的items。

    webURL用来指定Ajax请求使用的url,默认是当前站点的url。

    options(options1,options2等等)用来指定Web Servcie调用需要的参数,不同的Web Service有不同的参数,例如GetListItems服务,需要指定listName,viewName等等。

    async用来指定Web Service的调用方式是异步还是同步的,默认Ajax的调用都是异步的,如果需要可以使用async: false来强制使用同步的方式调用Web Service

    completefunc用来指定Web Service调用成功的回调函数。

    举一个简单的例子,使用SPServices调用GetListItems方法:

    [javascript] view plaincopy在CODE上查看代码片派生到我的代码片
     
    1. $().SPServices({  
    2.                 operation: "GetListItems",  
    3.                 webURL:"/",  
    4.                 listName: "Tasks",  
    5.                 async: false,  
    6.                 completefunc: function (xData, Status) {  
    7.                     if (Status == 'success')  
    8.                     {  
    9.                         alert(xData.responseText);  
    10.                     }  
    11.                 }  
    12.             });  
    在我的环境中,运行以上代码的结果如下图所示。(Tasks列表中只有一条数据)

    可以看到我们用了非常少的代码,就完成了对GetListItems方法的调用,并且可以在completefunc方法中处理返回结果。调用Web Service返回的xml数据被保存在xData.responseXML属性中,在SPSerives库中,提供了两个很好用的方法,来处理xml数据。

    一个是用来解析xml数据的SPFilterNode

    语法是:

    [javascript] view plaincopy在CODE上查看代码片派生到我的代码片
     
    1. $(xData.responseXML).SPFilterNode(somenode)  
    可以使用这个方法分析GetListItems方法返回的xml数据,如下所示:
    [javascript] view plaincopy在CODE上查看代码片派生到我的代码片
     
    1. $().SPServices({  
    2.                operation: "GetListItems",  
    3.                webURL:"/",  
    4.                listName: "Tasks",  
    5.                async: false,  
    6.                completefunc: function (xData, Status) {  
    7.                    if (Status == 'success')  
    8.                    {  
    9.                        $(xData.responseXML).SPFilterNode("z:row").each(function (index, item) { alert(index); alert(item); });  
    10.                    }  
    11.                }  
    12.            });  
    这里使用SPFilterNode方法遍历每个z:row节点。


    另一个方法是将xml数据转换为Json对象的SPXmlToJson

    语法是:

    [javascript] view plaincopy在CODE上查看代码片派生到我的代码片
     
    1. $(xData.responseXML).SPFilterNode("z:row").SPXmlToJson({   
    2.   mapping: {},  
    3.   includeAllAttrs: false,    //是否包含z:row节点中的所有属性  
    4.   removeOws: true,           //是否需要移除Ows_前缀  
    5.   sparse: false              //如果是true,将不返回空的属性值<span style="font-family: Arial, Helvetica, sans-serif;">("")</span>  
    6. });  

    这里需要说明的是mapping参数,这个属性允许你指定xml节点的属性和Json对象属性之间的匹配规则,例如你希望ows_Title这个z:row节点的属性,在Json对象中的名字是“NewTitle”,类型是string类型的,那么可以添加这样一个mapping:

    [javascript] view plaincopy在CODE上查看代码片派生到我的代码片
     
    1. ows_Title: {mappedName: "NewTitle", objectType: "Text"}  
    其中mappedName指定了Json对象中的名字,objectType指定了转换之后的JS对象。SharePoint Field对象和JS对象的对应转换关系如下:
    SPFieldType(字段类型)JavaScript Object Type(JS类型)
    Counter int
    Integer int
    DateTime Date()
    User User = {userId, userName}
    UserMulti User数组
    Lookup lookup = {lookupId, lookupValue}
    LookupMulti lookup数组
    Boolean true / false
    MultiChoice string数字
    Currency float
    Text string

    举例说明:

    [javascript] view plaincopy在CODE上查看代码片派生到我的代码片
     
    1. $().SPServices({  
    2.                 operation: "GetListItems",  
    3.                 webURL:"/",  
    4.                 listName: "Tasks",  
    5.                 async: false,  
    6.                 completefunc: function (xData, Status) {  
    7.                     if (Status == 'success')  
    8.                     {  
    9.                         var myJson = $(xData.responseXML).SPFilterNode("z:row").SPXmlToJson({  
    10.                             mapping: {  
    11.                                 ows_ID: { mappedName: "ID", objectType: "Counter" },  
    12.                                 ows_Title: { mappedName: "NewTitle", objectType: "Text" },  
    13.                                 ows_Created: { mappedName: "Created", objectType: "DateTime" },  
    14.                             },  
    15.                             includeAllAttrs: true,  
    16.                             removeOws: false  
    17.                         });  
    18.                         alert(myJson);  
    19.                         alert(myJson[0].ID);  
    20.                         alert(myJson[0].NewTitle);  
    21.                         alert(myJson[0].Created);  
    22.                     }  
    23.                 }  
    24.             });  
    运行之后myJson对象的结构是这样的:

    可以看到ows_ID已经map到ID这个属性上了,同样ows_Title也map到NewTitle这个属性上了,同样还有ows_Created,map到了Created属性。

    除了以上的两个方法之外,SPServices还提供了一个更加方面的方法:SPGetListItemsJson

    这个方法调用GetListItems这个Web Service方法,直接返回一个Json对象,非常方便使用,更省去了mapping的麻烦。

    语法:

    [javascript] view plaincopy在CODE上查看代码片派生到我的代码片
     
    1. $().SPServices.SPGetListItemsJson({  
    2.   webURL: "",  
    3.   listName: "",  
    4.   CAMLViewName: "",  
    5.   CAMLQuery: "",  
    6.   CAMLViewFields: "",  
    7.   CAMLRowLimit: "",  
    8.   CAMLQueryOptions: "",  
    9.   changeToken: "",  
    10.   contains: "",  
    11.   mapping: null,  
    12.   mappingOverrides: null,  
    13.   debug: false  
    14. });  

    这个就不举例子了。

    除了以上作为例子的GetListItems方法之外,SPService库还可以支持很多的Web Service调用,具体有哪些请参考:点击打开链接

  • 相关阅读:
    AGC037F Counting of Subarrays
    AGC025F Addition and Andition
    CF506C Mr. Kitayuta vs. Bamboos
    AGC032D Rotation Sort
    ARC101F Robots and Exits
    AGC032E Modulo Pairing
    CF559E Gerald and Path
    CF685C Optimal Point
    聊聊Mysql索引和redis跳表
    什么是线程安全
  • 原文地址:https://www.cnblogs.com/ningang/p/4302072.html
Copyright © 2011-2022 走看看