在Javascript中调用WSS---上
2010-09-14 13:43:20 来源:WEB开发网前段时间做一个MOSS的项目,boss要求在一个List Item新建的页面上增加用户身份验证,符合条件的用户可以进入,不符合条件的用户转到Accessdenied页面。因为整个项目建立在MOSS平台上,并且客户不允许在服务器上部署dll,所以不能写C#代码,所有的前台展示都需要在脚本中来完成(真是变态啊)。
好在WSS给我们提供了内容丰富的WebService,我们只需要通过js去调用就行了,这跟使用Ajax基本没什么区别。虽然需求很简单,通过js调用Lists.GetListItems()方法,查找User Information List中的用户,然后再加一些判断就可以了,但是我想到在js中调用WSS提供的方法也是一个会经常使用到的东西,所以在这里整理了一下代码,也作为一个js调用WSS的通用代码,以后直接拿过来用就可以了。
首先是核心部分,这跟Ajax的核心代码基本相同,都是先构造一个XMLHttpRequest或者ActiveXObject对象,然后就是XML的发送和接收。
SPAPI_Core
function SPAPI_Core()
{
this.createXMLHttpRequest = function()
{
if (typeof XMLHttpRequest != "undefined")
{
return new XMLHttpRequest();
}
else if (typeof ActiveXObject != "undefined")
{
return new ActiveXObject("Microsoft.XMLHTTP");
}
else
{
throw new Error("XMLHttpRequest not supported");
}
}
this.executeRequest = function(serviceUrl, action, packet, params)
{
var oXMLHttpRequest = this.createXMLHttpRequest();
var result = null;
var resultName;
oXMLHttpRequest.open("POST", serviceUrl, false);
oXMLHttpRequest.setRequestHeader("Content-Type", "text/xml; charset=utf-8");
oXMLHttpRequest.setRequestHeader("SOAPAction", action);
if (params != null)
{
for (var i=0; i < params.length; i++)
{
packet = packet.replace('{' + i.toString() + '}', (params[i] == null ? '' : params[i]));
}
}
oXMLHttpRequest.send(packet);
resultName = action.substring(action.lastIndexOf('/') + 1) + 'Result';
var resBatch;
var status;
var statusText;
status = oXMLHttpRequest.status;
statusText = oXMLHttpRequest.statusText;
if (status == 200)
{
// Check for SharePoint error code
resBatch = oXMLHttpRequest.responseXML.getElementsByTagName(resultName);
var codeEl = oXMLHttpRequest.responseXML.getElementsByTagName('ErrorCode');
if (codeEl != null && codeEl.length > 0)
{
var spStatus = parseInt(codeEl[0].childNodes[0].nodeValue);
if (spStatus != 0)
{
status = 0-spStatus; // Note we make this -ve to prevent confusion with the HTTP code
var messageEl = oXMLHttpRequest.responseXML.getElementsByTagName('ErrorText');
if (messageEl != null && messageEl.length >= 0)
{
statusText = messageEl[0].childNodes[0].nodeValue;
}
}
}
}
result = {
status : status,
statusText : statusText,
responseXML : oXMLHttpRequest.responseXML,
responseText : oXMLHttpRequest.responseText,
resultNode : (resBatch == null || resBatch.length == 0 ? null : resBatch[0])
};
return result;
}
}
Tags:Javascript 调用 WSS
编辑录入:爽爽 [复制链接] [打 印]更多精彩
赞助商链接