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

📄 nsxmlrpcclient.js

📁 从国外的站点上淘的个人财务管理系统.开源.
💻 JS
📖 第 1 页 / 共 3 页
字号:
        return false;    },    /* Generate the XML-RPC request body */    _generateRequestBody: function(writer, methodName, methodArgs) {        writer.startElement('methodCall');        writer.startElement('methodName');        writer.write(methodName);        writer.endElement('methodName');        writer.startElement('params');        for (var i = 0; i < methodArgs.length; i++) {            writer.startElement('param');            this._generateArgumentBody(writer, methodArgs[i]);            writer.endElement('param');        }        writer.endElement('params');        writer.endElement('methodCall');    },    /* Write out a XML-RPC parameter value */    _generateArgumentBody: function(writer, obj) {        writer.startElement('value');        var sType = this._typeOf(obj);        switch (sType) {            case 'PRUint8':            case 'PRUint16':            case 'PRInt16':            case 'PRInt32':                obj=obj.QueryInterface(Components.interfaces['nsISupports' +                    sType]);                writer.startElement('i4');                writer.write(obj.toString());                writer.endElement('i4');                break;            case 'PRBool':                obj=obj.QueryInterface(Components.interfaces.nsISupportsPRBool);                writer.startElement('boolean');                writer.write(obj.data ? '1' : '0');                writer.endElement('boolean');                break;            case 'Char':            case 'CString':                obj=obj.QueryInterface(Components.interfaces['nsISupports' +                    sType]);                writer.startElement('string');                writer.write(obj.toString());                writer.endElement('string');                break;            case 'Float':            case 'Double':                obj=obj.QueryInterface(Components.interfaces['nsISupports' +                    sType]);                writer.startElement('double');                writer.write(obj.toString());                writer.endElement('double');                break;            case 'PRTime':                obj = obj.QueryInterface(                    Components.interfaces.nsISupportsPRTime);                var date = new Date(obj.data)                writer.startElement('dateTime.iso8601');                writer.write(iso8601Format(date));                writer.endElement('dateTime.iso8601');                break;                            case 'InputStream':                obj = obj.QueryInterface(Components.interfaces.nsIInputStream);                obj = toScriptableStream(obj);                writer.startElement('base64');                streamToBase64(obj, writer);                writer.endElement('base64');                break;                        case 'Array':                obj = obj.QueryInterface(                    Components.interfaces.nsISupportsArray);                writer.startElement('array');                writer.startElement('data');                for (var i = 0; i < obj.Count(); i++)                    this._generateArgumentBody(writer, obj.GetElementAt(i));                writer.endElement('data');                writer.endElement('array');                break;            case 'Dictionary':                obj = obj.QueryInterface(Components.interfaces.nsIDictionary);                writer.startElement('struct');                var keys = obj.getKeys({});                for (var k = 0; k < keys.length; k++) {                    writer.startElement('member');                    writer.startElement('name');                    writer.write(keys[k]);                    writer.endElement('name');                    this._generateArgumentBody(writer, obj.getValue(keys[k]));                    writer.endElement('member');                }                writer.endElement('struct');                break;            default:                throw Components.Exception('Unsupported argument', null, null,                    obj);        }        writer.endElement('value');    },    /* Determine type of a nsISupports primitive, array or dictionary. */    _typeOf: function(obj) {        // XPConnect alows JS to pass in anything, because we are a regular        // JS object to it. So we have to test rigorously.        if (typeof obj != 'object') return 'Unknown';        // Anything else not nsISupports is not allowed.        if (typeof obj.QueryInterface != 'function') return 'Unknown';        // Now we will have to eliminate by trying all possebilities.        try {            obj.QueryInterface(Components.interfaces.nsISupportsPRUint8);            return 'PRUint8';        } catch(e) {}                try {            obj.QueryInterface(Components.interfaces.nsISupportsPRUint16);            return 'PRUint16';        } catch(e) {}                try {            obj.QueryInterface(Components.interfaces.nsISupportsPRInt16);            return 'PRInt16';        } catch(e) {}                try {            obj.QueryInterface(Components.interfaces.nsISupportsPRInt32);            return 'PRInt32';        } catch(e) {}                try {            obj.QueryInterface(Components.interfaces.nsISupportsPRBool);            return 'PRBool';        } catch(e) {}                try {            obj.QueryInterface(Components.interfaces.nsISupportsChar);            return 'Char';        } catch(e) {}                try {            obj.QueryInterface(Components.interfaces.nsISupportsCString);            return 'CString';        } catch(e) {}                try {            obj.QueryInterface(Components.interfaces.nsISupportsFloat);            return 'Float';        } catch(e) {}                try {            obj.QueryInterface(Components.interfaces.nsISupportsDouble);            return 'Double';        } catch(e) {}                try {            obj.QueryInterface(Components.interfaces.nsISupportsPRTime);            return 'PRTime';        } catch(e) {}                try {            obj.QueryInterface(Components.interfaces.nsIInputStream);            return 'InputStream';        } catch(e) {}                try {            obj.QueryInterface(Components.interfaces.nsISupportsArray);            return 'Array';        } catch(e) {}                try {            obj.QueryInterface(Components.interfaces.nsIDictionary);            return 'Dictionary';        } catch(e) {}                // Not a supported type        return 'Unknown';    },    // Response parsing state    _valueStack: [],    _currValue: null,    _cdata: null,    parse: function(doc) {        var node = doc.firstChild;        var result;        if (node.nodeType == DOMNode.TEXT_NODE)            node = node.nextSibling;        if ((node.nodeType != DOMNode.ELEMENT_NODE) ||            (node.nodeName != 'methodResponse')) {            throw Components.Exception('Expecting a methodResponse', null, null,                                       doc);        }        node = node.firstChild;        if (node.nodeType == DOMNode.TEXT_NODE)            node = node.nextSibling;        if (node.nodeType != DOMNode.ELEMENT_NODE)            throw Components.Exception('Expecting a params or fault', null,                                       null, doc);        if (node.nodeName == 'params') {            node = node.firstChild;            if (node.nodeType == DOMNode.TEXT_NODE)                node = node.nextSibling;            if ((node.nodeType != DOMNode.ELEMENT_NODE) ||                (node.nodeName != 'param')) {                throw Components.Exception('Expecting a param', null, null,                                           doc);            }            result = this.parseValue(node.firstChild);        } else if (node.nodeName == 'fault') {            this._foundFault = true;            result = this.parseFault(node.firstChild);        } else {            throw Components.Exception('Expecting a params or fault', null,                                       null, doc);        }        debug('Parse finished');        return result;    },    parseValue: function(node) {        var cValue = new Value();        if (node && (node.nodeType == DOMNode.TEXT_NODE))            node = node.nextSibling;        if (!node || (node.nodeType != DOMNode.ELEMENT_NODE) ||            (node.nodeName != 'value')) {            throw Components.Exception('Expecting a value', null, null, node);        }        node = node.firstChild;        if (!node)            return cValue;        if (node.nodeType == DOMNode.TEXT_NODE){            if (!node.nextSibling) {                cValue.value = node.nodeValue;                return cValue;            } else {                node = node.nextSibling;            }        }        if (node.nodeType != DOMNode.ELEMENT_NODE)            throw Components.Exception('Expecting a value type', null, null,                                       node);        switch (node.nodeName) {            case 'string':                cValue.value = this.parseString(node.firstChild);                break;            case 'i4':            case 'int':                cValue.type = this.INT;                cValue.value = this.parseString(node.firstChild);                break;            case 'boolean':                cValue.type = this.BOOLEAN;                cValue.value = this.parseString(node.firstChild);                break;            case 'double':                cValue.type = this.DOUBLE;                cValue.value = this.parseString(node.firstChild);                break;            case 'dateTime.iso8601':                cValue.type = this.DATETIME;                cValue.value = this.parseString(node.firstChild);                break;            case 'base64':                cValue.type = this.BASE64;                cValue.value = this.parseString(node.firstChild);                break;            case 'struct':                cValue.type = this.STRUCT;                this.parseStruct(cValue, node.firstChild);                break;            case 'array':                cValue.type = this.ARRAY;                this.parseArray(cValue, node.firstChild);                break;            default:                throw Components.Exception('Expecting a value type', null, null,                                           node);        }        return cValue;    },    parseString: function(node) {        value = '';        while (node) {            if (node.nodeType != DOMNode.TEXT_NODE)                throw Components.Exception('Expecting a text node', null, null,                                           node);            value += node.nodeValue;             node = node.nextSibling;        }        return value;    },    parseStruct: function(struct, node) {        while (node) {            if (node.nodeType == DOMNode.TEXT_NODE)                node = node.nextSibling;            if (!node)                return;            if ((node.nodeType != DOMNode.ELEMENT_NODE) ||                (node.nodeName != 'member')) {                throw Components.Exception('Expecting a member', null, null,                                           node);            }            this.parseMember(struct, node.firstChild);            node = node.nextSibling;        }    },    parseMember: function(struct, node) {        var cValue;        if (node.nodeType == DOMNode.TEXT_NODE)            node = node.nextSibling;        if (!node || (node.nodeType != DOMNode.ELEMENT_NODE) ||            (node.nodeName != 'name')) {            throw Components.Exception('Expecting a name', null, null, node);        }        struct.name = this.parseString(node.firstChild);        cValue = this.parseValue(node.nextSibling);        struct.appendValue(cValue.value);    },    parseArray: function(array, node) {        if (node.nodeType == DOMNode.TEXT_NODE)            node = node.nextSibling;        if (!node || (node.nodeType != DOMNode.ELEMENT_NODE) ||            (node.nodeName != 'data')) {            throw Components.Exception('Expecting array data', null, null, node);        }        for (node = node.firstChild; node; node = node.nextSibling) {            if (node.nodeType == DOMNode.TEXT_NODE)

⌨️ 快捷键说明

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