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

本文介绍了如何使用SPServices库调用Web Service,重点讲解了GetListItems方法的使用,包括异步调用、参数设置、回调函数以及处理返回的XML数据。通过SPFilterNode和SPXmlToJson方法解析和转换XML到JSON,同时提到了简化版的SPGetListItemsJson方法。文章还提及SPServices支持多种Web Service调用。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

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

先看一下语法:

$().SPServices({
	operation: "operationname",
	[webURL: "/sitepath",]
	[option1: value1,]
	[option2: value2,]
	[async: false,]
	completefunc: function (xData, Status) {
		...do stuff...
	}
});

其中:

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方法:

$().SPServices({
                operation: "GetListItems",
                webURL:"/",
                listName: "Tasks",
                async: false,
                completefunc: function (xData, Status) {
                    if (Status == 'success')
                    {
                        alert(xData.responseText);
                    }
                }
            });
在我的环境中,运行以上代码的结果如下图所示。(Tasks列表中只有一条数据)

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

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

语法是:

$(xData.responseXML).SPFilterNode(somenode)
可以使用这个方法分析GetListItems方法返回的xml数据,如下所示:

 $().SPServices({
                operation: "GetListItems",
                webURL:"/",
                listName: "Tasks",
                async: false,
                completefunc: function (xData, Status) {
                    if (Status == 'success')
                    {
                        $(xData.responseXML).SPFilterNode("z:row").each(function (index, item) { alert(index); alert(item); });
                    }
                }
            });
这里使用SPFilterNode方法遍历每个z:row节点。


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

语法是:

$(xData.responseXML).SPFilterNode("z:row").SPXmlToJson({ 
  mapping: {},
  includeAllAttrs: false,    //是否包含z:row节点中的所有属性
  removeOws: true,           //是否需要移除Ows_前缀
  sparse: false              //如果是true,将不返回空的属性值<span style="font-family: Arial, Helvetica, sans-serif;">("")</span>
});

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

ows_Title: {mappedName: "NewTitle", objectType: "Text"}
其中mappedName指定了Json对象中的名字,objectType指定了转换之后的JS对象。SharePoint Field对象和JS对象的对应转换关系如下:

SPFieldType(字段类型)JavaScript Object Type(JS类型)
Counterint
Integerint
DateTimeDate()
UserUser = {userId, userName}
UserMultiUser数组
Lookuplookup = {lookupId, lookupValue}
LookupMultilookup数组
Booleantrue / false
MultiChoicestring数字
Currencyfloat
Textstring

举例说明:

$().SPServices({
                operation: "GetListItems",
                webURL:"/",
                listName: "Tasks",
                async: false,
                completefunc: function (xData, Status) {
                    if (Status == 'success')
                    {
                        var myJson = $(xData.responseXML).SPFilterNode("z:row").SPXmlToJson({
                            mapping: {
                                ows_ID: { mappedName: "ID", objectType: "Counter" },
                                ows_Title: { mappedName: "NewTitle", objectType: "Text" },
                                ows_Created: { mappedName: "Created", objectType: "DateTime" },
                            },
                            includeAllAttrs: true,
                            removeOws: false
                        });
                        alert(myJson);
                        alert(myJson[0].ID);
                        alert(myJson[0].NewTitle);
                        alert(myJson[0].Created);
                    }
                }
            });
运行之后myJson对象的结构是这样的:

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


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

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

语法:

$().SPServices.SPGetListItemsJson({
  webURL: "",
  listName: "",
  CAMLViewName: "",
  CAMLQuery: "",
  CAMLViewFields: "",
  CAMLRowLimit: "",
  CAMLQueryOptions: "",
  changeToken: "",
  contains: "",
  mapping: null,
  mappingOverrides: null,
  debug: false
});

这个就不举例子了。


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

下一章SPServices介绍之四中介绍如何使用SPServices简单的实现下拉菜单的级联效果。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值