⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 xmlrpc.js

📁 SugarCRM5.1 开源PHP客户关系管理系统
💻 JS
📖 第 1 页 / 共 3 页
字号:
                    switch (child.tagName){                        case "string":                            var s=""                             //Mozilla has many textnodes with a size of 4096 chars each instead of one large one.                            //They all need to be concatenated.                            for(var j=0;j<child.childNodes.length;j++){                                s+=new String(child.childNodes.item(j).nodeValue);                            }                            return s;                        case "int":                        case "i4":                        case "double":                            return (child.firstChild) ? new Number(child.firstChild.nodeValue) : 0;                        case "boolean":                            return Boolean(isNaN(parseInt(child.firstChild.nodeValue)) ? (child.firstChild.nodeValue == "true") : parseInt(child.firstChild.nodeValue));                        case "base64":                            return parseBase64(child);                        case "dateTime.iso8601":                            return parseDateTime(child);                        case "array":                            return parseArray(child);                        case "struct":                            return parseStruct(child);                        case "nil": //for python None todo: ??? is this valid XML-RPC                            return null;                        default:                            throw new mod.MalformedXmlRpc("'string','int','i4','double','boolean','base64','dateTime.iso8601','array' or 'struct' element expected.\nFound: '" + child.tagName + "'");                                            }                }            }            if(node.firstChild){                var s=""                 //Mozilla has many textnodes with a size of 4096 chars each instead of one large one.                //They all need to be concatenated.                for(var j=0;j<node.childNodes.length;j++){                    s+=new String(node.childNodes.item(j).nodeValue);                }                return s;            }else{                return "";            }        }catch(e){            throw new mod.MalformedXmlRpc("'value' element could not be parsed.",null,e);            }    }    /**        Parses a base64 element.        @param node   The base64 element.        @return          A string with the decoded base64.    */    var parseBase64=function(node){        try{            var s = node.firstChild.nodeValue;            return s.decode("base64");        }catch(e){            throw new mod.MalformedXmlRpc("'base64' element could not be parsed.",null,e);            }    }    /**        Parses a dateTime.iso8601 element.        @param node   The dateTime.iso8601 element.        @return           A JavaScript date.    */    var parseDateTime=function(node){        try{            if(/^(\d{4})-?(\d{2})-?(\d{2})T(\d{2}):?(\d{2}):?(\d{2})/.test(node.firstChild.nodeValue)){                return new Date(Date.UTC(RegExp.$1, RegExp.$2-1, RegExp.$3, RegExp.$4, RegExp.$5, RegExp.$6));            }else{ //todo error message                throw new mod.MalformedXmlRpc("Could not convert the given date.");            }        }catch(e){            throw new mod.MalformedXmlRpc("'dateTime.iso8601' element could not be parsed.",null,e);            }    }    /**        Parses an array element.        @param node   The array element.        @return           An Array.    */    var parseArray=function(node){        try{            for(var i=0;i<node.childNodes.length;i++){                var child = node.childNodes.item(i);                if (child.nodeType == 1){                    switch (child.tagName){                        case "data":                            return parseData(child);                        default:                            throw new mod.MalformedXmlRpc("'data' element expected.\nFound: '" + child.tagName + "'");                                            }                }            }            throw new mod.MalformedXmlRpc("'data' element expected. But not found.");           }catch(e){            throw new mod.MalformedXmlRpc("'array' element could not be parsed.",null,e);            }    }    /**        Parses a data element.        @param node   The data element.        @return           The value of a data element.    */    var parseData=function(node){        try{            var rslt = new Array();            for(var i=0;i<node.childNodes.length;i++){                var child = node.childNodes.item(i);                if (child.nodeType == 1){                    switch (child.tagName){                        case "value":                            rslt.push(parseValue(child));                            break;                        default:                            throw new mod.MalformedXmlRpc("'value' element expected.\nFound: '" + child.tagName + "'");                                            }                }            }            return rslt;        }catch(e){            throw new mod.MalformedXmlRpc("'data' element could not be parsed.",null,e);            }    }    /**        Parses a struct element.        @param node   The struct element.        @return           A JavaScript object. Struct memembers are properties of the object.    */    var parseStruct=function(node){        try{            var struct = new Object();            for(var i=0;i<node.childNodes.length;i++){                var child = node.childNodes.item(i);                if (child.nodeType == 1){                    switch (child.tagName){                        case "member":                            var member = parseMember(child); //returns [name, value]                            if(member[0] != ""){                                struct[member[0]] = member[1];                            }                            break;                        default:                            throw new mod.MalformedXmlRpc("'data' element expected.\nFound: '" + child.tagName + "'");                                            }                }            }            return struct;        }catch(e){            throw new mod.MalformedXmlRpc("'struct' element could not be parsed.",null,e);            }    }    /**        Parses a member element.        @param node  The member element.        @return          Array containing [memberName, value].    */    var parseMember=function(node){        try{            var name="";            var value=null;            for(var i=0;i<node.childNodes.length;i++){                var child = node.childNodes.item(i);                if (child.nodeType == 1){                    switch (child.tagName){                        case "value":                            value = parseValue(child);                             break;                        case "name":                            if(child.hasChildNodes()){                                name = new String(child.firstChild.nodeValue);                            }                            break;                        default:                            throw new mod.MalformedXmlRpc("'value' or 'name' element expected.\nFound: '" + child.tagName + "'");                                            }                }            }            /*if(name == ""){                throw new mod.MalformedXmlRpc("Name for member not found/convertable.");            }else{                return new Array(name, value);            }*/            return [name, value];        }catch(e){            throw new mod.MalformedXmlRpc("'member' element could not be parsed.",null,e);            }    }    /**        Parses a fault element.        @param node  The fault element.        @return          A Fault Exception object.    */    var parseFault = function(node){        try{            for(var i=0;i<node.childNodes.length;i++){                var child = node.childNodes.item(i);                if (child.nodeType == 1){                    switch (child.tagName){                        case "value":                            var flt = parseValue(child);                             return new mod.Fault(flt.faultCode, flt.faultString);                        default:                            throw new mod.MalformedXmlRpc("'value' element expected.\nFound: '" + child.tagName + "'");                                            }                }            }            throw new mod.MalformedXmlRpc("'value' element expected. But not found.");                                }catch(e){            throw new mod.MalformedXmlRpc("'fault' element could not be parsed.",null,e);            }    }    /**        Class for creating XML-RPC methods.        Calling the created method will result in an XML-RPC call to the service.        The return value of this call will be the return value of the RPC call.        RPC-Faults will be raised as Exceptions.                Asynchronous operation:        If the last parameter passed to the method is an XMLRPCAsyncCallback object,         then the remote method will be called asynchronously.         The results and errors are passed to the callback.    */    mod.XMLRPCMethod =Class("XMLRPCMethod", function(publ){                var postData = function(url, user, pass, data, callback){            if(callback == null){                var rslt = urllib.postURL(url, user, pass, data, [["Content-Type", "text/xml"]]);                return rslt;            }else{                urllib.postURL(url, user, pass, data, [["Content-Type", "text/xml"]], callback);            }        }                var handleResponse=function(resp){            var status=null;            try{//see if the server responded with a response code 200 OK.                status = resp.status;            }catch(e){            }            if(status == 200){                var respDoc=null;                try{                    respDoc = resp.responseXML;                }catch(e){                }                var respTxt = "";                 try{                                     respTxt=resp.responseText;                }catch(e){                }                if(respDoc == null){                    if(respTxt == null || respTxt == ""){                        throw new mod.MalformedXmlRpc("The server responded with an empty document.", "");                    }else{                        return mod.unmarshall(respTxt);                    }                }else{ //use the respDoc directly so the xml does not have to be parsed.                    return mod.unmarshallDoc(respDoc, respTxt);                }            }else{                throw new mod.InvalidServerResponse(status);            }        }                var getXML = function(methodName, args){            var data='<?xml version="1.0"?><methodCall><methodName>' + methodName + '</methodName>';            if (args.length>0){                data += "<params>";                for(var i=0;i<args.length;i++){                    data += '<param><value>' + mod.marshall(args[i]) + '</value></param>';                }                data += '</params>';            }            data += '</methodCall>';            return data;        }        /**            Initializes the XML-RPC method.

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -