Skip to content

自定义通讯相关方法

HTTP请求方法

DoWebGet

语法

javascript
DoWebGet(URL)

功能

该函数对URL执行指定的Web Get请求。

参数

名称必选/可选数据类型说明
URL必选stringGet请求返回信息

返回值

Get请求返回信息。

说明

该函数对URL执行指定的Web Get请求。同样,该函数唯一的参数URL,可以是绝对或者相对当前网页的URL,返回值可以保存在一个变量中。可以用该函数实现自定义的基于HTTP协议的通讯协议。或者在不提交当前页面的情况下从服务器及时获取信息。

示例代码

javascript
// 基本用法 - 获取数据
var response = OCX_OBJ.DoWebGet("https://api.example.com/data");
console.log("服务器响应:", response);

// 获取JSON数据
var jsonResponse = OCX_OBJ.DoWebGet("https://api.example.com/users");
var users = JSON.parse(jsonResponse);

// 获取配置信息
var config = OCX_OBJ.DoWebGet("./config/settings.json");

// 检查服务器状态
var status = OCX_OBJ.DoWebGet("https://api.example.com/health");
if (status === "OK") {
    console.log("服务器运行正常");
}

// 获取文档模板列表
var templates = OCX_OBJ.DoWebGet("https://api.example.com/templates");

DoWebExecute

语法

javascript
DoWebExecute(URL, CPARA)

功能

该函数对URL执行指定的Multi-Part请求。

参数

名称必选/可选数据类型说明
URL必选stringPost请求返回信息
CPARA必选string参数字符串

返回值

Post请求返回信息。

说明

该函数对URL执行指定的Multi-Part请求。同样,该函数的参数URL,可以是绝对或者相对当前网页的URL,CPARA参数是"&"分隔的"F1=V1"类型的参数串。请参考SaveToURL函数的介绍中有关CPARA的部分。该函数的返回值可以保存在一个变量中。可以用该函数实现自定义的基于HTTP协议的通讯协议。或者在不提交当前页面的情况下更新服务器的信息。

注意:该方法执行的是Multi-Part请求。

示例代码

javascript
// 基本用法 - 发送数据
var params = "name=张三&age=25&department=技术部";
var response = OCX_OBJ.DoWebExecute("https://api.example.com/users", params);
console.log("服务器响应:", response);

// 提交表单数据
var formData = "username=admin&password=123456&action=login";
var loginResult = OCX_OBJ.DoWebExecute("https://api.example.com/login", formData);

// 更新用户信息
var updateData = "id=123&name=李四&email=lisi@example.com&phone=13800138000";
var updateResult = OCX_OBJ.DoWebExecute("https://api.example.com/users/update", updateData);

// 上传文档信息
var docInfo = "title=合同文档&type=contract&size=1024&author=张三";
var uploadResult = OCX_OBJ.DoWebExecute("https://api.example.com/documents", docInfo);

// 批量操作
var batchData = "action=batch_update&ids=1,2,3&status=approved";
var batchResult = OCX_OBJ.DoWebExecute("https://api.example.com/batch", batchData);

HTTP头信息管理

AddHTTPHeader

语法

javascript
AddHTTPHeader(HeaderStr)

功能

添加自定义的HTTP头信息。

参数

名称必选/可选数据类型说明
HeaderStr必选stringHTTP头字符串

返回值

无返回值。

说明

添加自定义的HTTP头信息。用于定制认证等。 参数HeaderStr:设置HTTP头字符串,以键值对方式传入。如Obj.AddHTTPHeader("key:value")。

示例代码

javascript
// 添加认证头
OCX_OBJ.AddHTTPHeader("Authorization: Bearer your-token-here");

// 添加内容类型
OCX_OBJ.AddHTTPHeader("Content-Type: application/json");

// 添加自定义头
OCX_OBJ.AddHTTPHeader("X-API-Key: your-api-key");

// 添加用户代理
OCX_OBJ.AddHTTPHeader("User-Agent: NTKO-Office-Client/1.0");

// 添加多个头信息
OCX_OBJ.AddHTTPHeader("Authorization: Bearer token123");
OCX_OBJ.AddHTTPHeader("Content-Type: application/x-www-form-urlencoded");
OCX_OBJ.AddHTTPHeader("X-Request-ID: req-12345");

HTTPHeaderReset

语法

javascript
HTTPHeaderReset()

功能

清除已经自定义的所有HTTP头信息。

参数

无参数。

返回值

无返回值。

说明

清除已经自定义的所有HTTP头信息。用于定制认证等。

示例代码

javascript
// 清除所有自定义HTTP头
OCX_OBJ.HTTPHeaderReset();

// 重新设置HTTP头
function resetAndSetHeaders() {
    OCX_OBJ.HTTPHeaderReset();
    OCX_OBJ.AddHTTPHeader("Authorization: Bearer new-token");
    OCX_OBJ.AddHTTPHeader("Content-Type: application/json");
}

完整示例

HTTP通讯管理器

javascript
// HTTP通讯管理器
class HTTPCommunicationManager {
    // 设置认证信息
    static setAuthentication(token) {
        OCX_OBJ.HTTPHeaderReset();
        OCX_OBJ.AddHTTPHeader("Authorization: Bearer " + token);
        OCX_OBJ.AddHTTPHeader("Content-Type: application/json");
    }
    
    // 获取数据
    static getData(url) {
        try {
            var response = OCX_OBJ.DoWebGet(url);
            return JSON.parse(response);
        } catch (error) {
            console.error("获取数据失败:", error);
            return null;
        }
    }
    
    // 发送数据
    static postData(url, data) {
        try {
            var params = this.objectToParams(data);
            var response = OCX_OBJ.DoWebExecute(url, params);
            return JSON.parse(response);
        } catch (error) {
            console.error("发送数据失败:", error);
            return null;
        }
    }
    
    // 对象转参数字符串
    static objectToParams(obj) {
        var params = [];
        for (var key in obj) {
            if (obj.hasOwnProperty(key)) {
                params.push(key + "=" + encodeURIComponent(obj[key]));
            }
        }
        return params.join("&");
    }
    
    // 更新数据
    static updateData(url, data) {
        return this.postData(url, data);
    }
    
    // 删除数据
    static deleteData(url, id) {
        var params = "id=" + id + "&action=delete";
        var response = OCX_OBJ.DoWebExecute(url, params);
        return JSON.parse(response);
    }
}

API客户端

javascript
// API客户端
class APIClient {
    constructor(baseURL, token) {
        this.baseURL = baseURL;
        this.token = token;
        this.setupHeaders();
    }
    
    // 设置HTTP头
    setupHeaders() {
        OCX_OBJ.HTTPHeaderReset();
        OCX_OBJ.AddHTTPHeader("Authorization: Bearer " + this.token);
        OCX_OBJ.AddHTTPHeader("Content-Type: application/x-www-form-urlencoded");
        OCX_OBJ.AddHTTPHeader("X-Client: NTKO-Office-Client");
    }
    
    // 获取用户信息
    getUserInfo(userId) {
        var url = this.baseURL + "/users/" + userId;
        var response = OCX_OBJ.DoWebGet(url);
        return JSON.parse(response);
    }
    
    // 更新用户信息
    updateUser(userId, userData) {
        var url = this.baseURL + "/users/" + userId;
        var params = this.buildParams(userData);
        var response = OCX_OBJ.DoWebExecute(url, params);
        return JSON.parse(response);
    }
    
    // 获取文档列表
    getDocuments() {
        var url = this.baseURL + "/documents";
        var response = OCX_OBJ.DoWebGet(url);
        return JSON.parse(response);
    }
    
    // 上传文档
    uploadDocument(docData) {
        var url = this.baseURL + "/documents";
        var params = this.buildParams(docData);
        var response = OCX_OBJ.DoWebExecute(url, params);
        return JSON.parse(response);
    }
    
    // 构建参数字符串
    buildParams(data) {
        var params = [];
        for (var key in data) {
            if (data.hasOwnProperty(key)) {
                params.push(key + "=" + encodeURIComponent(data[key]));
            }
        }
        return params.join("&");
    }
}

文档同步服务

javascript
// 文档同步服务
class DocumentSyncService {
    constructor(apiClient) {
        this.apiClient = apiClient;
    }
    
    // 同步文档到服务器
    syncDocumentToServer(documentData) {
        var syncData = {
            title: documentData.title,
            content: documentData.content,
            author: documentData.author,
            timestamp: new Date().toISOString(),
            action: "sync"
        };
        
        return this.apiClient.uploadDocument(syncData);
    }
    
    // 从服务器获取文档
    getDocumentFromServer(documentId) {
        var url = this.apiClient.baseURL + "/documents/" + documentId;
        var response = OCX_OBJ.DoWebGet(url);
        return JSON.parse(response);
    }
    
    // 更新文档状态
    updateDocumentStatus(documentId, status) {
        var updateData = {
            id: documentId,
            status: status,
            action: "update_status"
        };
        
        var url = this.apiClient.baseURL + "/documents/status";
        var params = this.apiClient.buildParams(updateData);
        var response = OCX_OBJ.DoWebExecute(url, params);
        return JSON.parse(response);
    }
    
    // 批量同步文档
    batchSyncDocuments(documents) {
        var results = [];
        for (var i = 0; i < documents.length; i++) {
            var result = this.syncDocumentToServer(documents[i]);
            results.push(result);
        }
        return results;
    }
}

实时通讯工具

javascript
// 实时通讯工具
class RealTimeCommunication {
    constructor(serverURL) {
        this.serverURL = serverURL;
        this.setupCommunication();
    }
    
    // 设置通讯
    setupCommunication() {
        OCX_OBJ.HTTPHeaderReset();
        OCX_OBJ.AddHTTPHeader("Content-Type: application/x-www-form-urlencoded");
        OCX_OBJ.AddHTTPHeader("X-Real-Time: true");
    }
    
    // 发送心跳
    sendHeartbeat() {
        var params = "action=heartbeat&timestamp=" + new Date().getTime();
        var response = OCX_OBJ.DoWebExecute(this.serverURL + "/heartbeat", params);
        return JSON.parse(response);
    }
    
    // 发送消息
    sendMessage(message) {
        var params = "action=message&content=" + encodeURIComponent(message) + "&timestamp=" + new Date().getTime();
        var response = OCX_OBJ.DoWebExecute(this.serverURL + "/message", params);
        return JSON.parse(response);
    }
    
    // 获取最新消息
    getLatestMessages() {
        var url = this.serverURL + "/messages?timestamp=" + new Date().getTime();
        var response = OCX_OBJ.DoWebGet(url);
        return JSON.parse(response);
    }
    
    // 开始实时通讯
    startRealTimeCommunication() {
        var self = this;
        setInterval(function() {
            self.sendHeartbeat();
        }, 30000); // 每30秒发送一次心跳
    }
}

使用场景示例

文档管理系统

javascript
// 文档管理系统
function documentManagementSystem() {
    // 1. 获取文档列表
    function getDocumentList() {
        var response = OCX_OBJ.DoWebGet("https://api.example.com/documents");
        var documents = JSON.parse(response);
        return documents;
    }
    
    // 2. 保存文档
    function saveDocument(documentData) {
        var params = "title=" + encodeURIComponent(documentData.title) + 
                    "&content=" + encodeURIComponent(documentData.content) + 
                    "&author=" + encodeURIComponent(documentData.author);
        var response = OCX_OBJ.DoWebExecute("https://api.example.com/documents", params);
        return JSON.parse(response);
    }
    
    // 3. 更新文档
    function updateDocument(documentId, documentData) {
        var params = "id=" + documentId + 
                    "&title=" + encodeURIComponent(documentData.title) + 
                    "&content=" + encodeURIComponent(documentData.content);
        var response = OCX_OBJ.DoWebExecute("https://api.example.com/documents/update", params);
        return JSON.parse(response);
    }
    
    // 4. 删除文档
    function deleteDocument(documentId) {
        var params = "id=" + documentId + "&action=delete";
        var response = OCX_OBJ.DoWebExecute("https://api.example.com/documents/delete", params);
        return JSON.parse(response);
    }
}

用户认证系统

javascript
// 用户认证系统
function userAuthenticationSystem() {
    // 1. 用户登录
    function login(username, password) {
        OCX_OBJ.HTTPHeaderReset();
        OCX_OBJ.AddHTTPHeader("Content-Type: application/x-www-form-urlencoded");
        
        var params = "username=" + encodeURIComponent(username) + 
                    "&password=" + encodeURIComponent(password) + 
                    "&action=login";
        var response = OCX_OBJ.DoWebExecute("https://api.example.com/auth/login", params);
        return JSON.parse(response);
    }
    
    // 2. 获取用户信息
    function getUserInfo(token) {
        OCX_OBJ.HTTPHeaderReset();
        OCX_OBJ.AddHTTPHeader("Authorization: Bearer " + token);
        
        var response = OCX_OBJ.DoWebGet("https://api.example.com/user/info");
        return JSON.parse(response);
    }
    
    // 3. 更新用户信息
    function updateUserInfo(token, userData) {
        OCX_OBJ.HTTPHeaderReset();
        OCX_OBJ.AddHTTPHeader("Authorization: Bearer " + token);
        OCX_OBJ.AddHTTPHeader("Content-Type: application/x-www-form-urlencoded");
        
        var params = "name=" + encodeURIComponent(userData.name) + 
                    "&email=" + encodeURIComponent(userData.email) + 
                    "&phone=" + encodeURIComponent(userData.phone);
        var response = OCX_OBJ.DoWebExecute("https://api.example.com/user/update", params);
        return JSON.parse(response);
    }
}

注意事项

  1. URL格式

    • 支持绝对URL和相对URL
    • 确保URL可访问
    • 注意HTTPS和HTTP协议
  2. 参数格式

    • CPARA参数使用"&"分隔
    • 格式为"key=value"
    • 需要URL编码特殊字符
  3. HTTP头管理

    • 使用AddHTTPHeader添加头信息
    • 使用HTTPHeaderReset清除头信息
    • 注意头信息的格式
  4. 错误处理

    • 检查网络连接
    • 处理服务器错误
    • 验证返回数据格式
  5. 性能优化

    • 合理使用HTTP头
    • 避免频繁的请求
    • 缓存常用数据
  6. 安全性

    • 使用HTTPS协议
    • 保护认证信息
    • 验证服务器响应
  7. 编码问题

    • 使用encodeURIComponent编码参数
    • 处理中文等特殊字符
    • 注意字符集设置
  8. 异步处理

    • 考虑请求超时
    • 处理并发请求
    • 避免阻塞操作