WEB开发网
开发学院网页设计JavaScript 在Javascript中调用WSS---上 阅读

在Javascript中调用WSS---上

 2010-09-14 13:43:20 来源:WEB开发网   
核心提示:前段时间做一个MOSS的项目,boss要求在一个List Item新建的页面上增加用户身份验证,在Javascript中调用WSS---上,符合条件的用户可以进入,不符合条件的用户转到Accessdenied页面,这跟Ajax的核心代码基本相同,都是先构造一个XMLHttpRequest或者ActiveXObject对

前段时间做一个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;
    }
}

1 2  下一页

Tags:Javascript 调用 WSS

编辑录入:爽爽 [复制链接] [打 印]
赞助商链接