# web.rpc.jsonClient 库模块帮助文档

## web.rpc 成员列表 <a id="web.rpc" href="#web.rpc">&#x23;</a>

### web.rpc.jsonClient <a id="web.rpc.jsonClient" href="#web.rpc.jsonClient">&#x23;</a>
JSON-RPC 2.0客户端  
[关于JSON-RPC 2.0](http://www.jsonrpc.org/specification)

### web.rpc.jsonClient("字符串参数") <a id="web.rpc.jsonClient" href="#web.rpc.jsonClient">&#x23;</a>
创建REST客户端

### web.rpc.jsonClient() <a id="web.rpc.jsonClient" href="#web.rpc.jsonClient">&#x23;</a>
[返回对象:webRpcJsonClientObject](#webRpcJsonClientObject)

## webRpcJsonClientObject 成员列表 <a id="webRpcJsonClientObject" href="#webRpcJsonClientObject">&#x23;</a>

### webRpcJsonClientObject.* <a id="webRpcJsonClientObject.any" href="#webRpcJsonClientObject.any">&#x23;</a>
远程对象名或远程方法名字。  
远程函数调用成功则第一个返回值为表对象，  
└── 该对象的 result 字段为返回值，error 为错误对象，两个字段不会同时存在。  
└── error 对象的 message 为错误信息，code 为错误代码，data 为错误附加数据。  
└── 如果存在 error 对象，则第 2 个返回值为 error 对象的 JSON 文本格式。  
调用失败第一个返回值为 null ，第二个返回值为错误信息  

如果调用 rpc.beginTrans 函数开始一个批量调用，  
则返回一个可以指定 end 成员函数的对象，服务器应答时自动回调此 end 函数  

[返回对象:webRpcJsonClientObject](#webRpcJsonClientObject)

## webRpcJsonClientObject.rpc 成员列表 <a id="webRpcJsonClientObject.rpc" href="#webRpcJsonClientObject.rpc">&#x23;</a>

RPC 本地客户端对象  
所以本地函数放在这个对象里面  
用户不得添加、删除、修改此对象的任何成员

### webRpcJsonClientObject.rpc.afterJsonStringify <a id="webRpcJsonClientObject.rpc.afterJsonStringify" href="#webRpcJsonClientObject.rpc.afterJsonStringify">&#x23;</a>

```aardio
webRpcJsonClientObject.rpc.afterJsonStringify = function(jsonData){
    /*可以在这里加密客户端JSON,返回null中止本次调用*/
	return jsonData;
}
```

### webRpcJsonClientObject.rpc.beforeJsonParse <a id="webRpcJsonClientObject.rpc.beforeJsonParse" href="#webRpcJsonClientObject.rpc.beforeJsonParse">&#x23;</a>

```aardio
webRpcJsonClientObject.rpc.beforeJsonParse = function(jsonData){
    /*可以在这里解密服务端数据,返回null中止本次调用*/
	return jsonData;
}
```

### webRpcJsonClientObject.rpc.beforeRequest(请求数据) <a id="webRpcJsonClientObject.rpc.beforeRequest" href="#webRpcJsonClientObject.rpc.beforeRequest">&#x23;</a>

```aardio
webRpcJsonClientObject.rpc.beforeRequest = function(reqData){
	/*此回调事件在发送请求前触发  
reqData.params是即将发送的参数*/
	return reqData;
}
```

### webRpcJsonClientObject.rpc.beginTrans() <a id="webRpcJsonClientObject.rpc.beginTrans" href="#webRpcJsonClientObject.rpc.beginTrans">&#x23;</a>
开始批量调用  
批量调用时单次调用的返回值是一个表  
可对返回值指定 end 成员函数，  
end 函数会在 commitTrans 提交批量调用成功后被触发

### webRpcJsonClientObject.rpc.charset <a id="webRpcJsonClientObject.rpc.charset" href="#webRpcJsonClientObject.rpc.charset">&#x23;</a>
获取或修改编码,此值必须为大写，默认为"UTF-8",  
因为JSON规定了Unicode编码方案,所以不建议也不应该修改这个值

### webRpcJsonClientObject.rpc.close() <a id="webRpcJsonClientObject.rpc.close" href="#webRpcJsonClientObject.rpc.close">&#x23;</a>
关闭RPC客户端并释放资源

### webRpcJsonClientObject.rpc.commitTrans() <a id="webRpcJsonClientObject.rpc.commitTrans" href="#webRpcJsonClientObject.rpc.commitTrans">&#x23;</a>
完成批量调用

### webRpcJsonClientObject.rpc.http <a id="webRpcJsonClientObject.rpc.http" href="#webRpcJsonClientObject.rpc.http">&#x23;</a>
用于执行http请求的inet.http对象  

[返回对象:inetHttpObject](https://www.aardio.com/zh-cn/docs/library-reference/inet/http.html#inetHttpObject)

### webRpcJsonClientObject.rpc.lastResponse() <a id="webRpcJsonClientObject.rpc.lastResponse" href="#webRpcJsonClientObject.rpc.lastResponse">&#x23;</a>
获取最后一次服务器返回的原始数据,  
如果控制台已打开或在开发环境中导入 console 库则在控制台输出数据  
下载文件时该值为空

### webRpcJsonClientObject.rpc.lastStatusCode <a id="webRpcJsonClientObject.rpc.lastStatusCode" href="#webRpcJsonClientObject.rpc.lastStatusCode">&#x23;</a>
获取最近一次请求返回的HTTP状态码  
100 ~ 101 为信息提示  
200 ~ 206 表示请求成功  
300 ~ 305 表示重定向  
400 ~ 415 表求客户端请求出错  
500 ~ 505 表示服务端错误

### webRpcJsonClientObject.rpc.lastStatusMessage() <a id="webRpcJsonClientObject.rpc.lastStatusMessage" href="#webRpcJsonClientObject.rpc.lastStatusMessage">&#x23;</a>
获取最近返回的HTTP状态码文本描述  
第二个返回值为状态码

### webRpcJsonClientObject.rpc.notify("函数名",参数) <a id="webRpcJsonClientObject.rpc.notify" href="#webRpcJsonClientObject.rpc.notify">&#x23;</a>
发送通知,服务器不返回值,  
如果 varargs 属性指定为 true 时将不定个数参数合为数组，  
varargs 为 false 时直接发送参数  

成功返回 true，失败返回 null,错误信息

### webRpcJsonClientObject.rpc.rollbackTrans() <a id="webRpcJsonClientObject.rpc.rollbackTrans" href="#webRpcJsonClientObject.rpc.rollbackTrans">&#x23;</a>
撤消尚未提交的批量调用

### webRpcJsonClientObject.rpc.setAuth("用户名","密码") <a id="webRpcJsonClientObject.rpc.setAuth" href="#webRpcJsonClientObject.rpc.setAuth">&#x23;</a>
设置HTTP登录用户名,密码

### webRpcJsonClientObject.rpc.varargs <a id="webRpcJsonClientObject.rpc.varargs" href="#webRpcJsonClientObject.rpc.varargs">&#x23;</a>
默认值为true,  
值为true时将不定个数的参数放入数组发送给服务端  
值为false时直接将单个参数发送给服务端  

JSON-RPC 2.0一个会制造混乱的地方：  
如果params是一个数组，并没有规定是展开为一个参数，还是作为一个数组参数。  

目前aardio的RPC服务端会负责展开数组作为多个参数，  
但客户端需要在这里手动设置

### webRpcJsonClientObject.rpc.version <a id="webRpcJsonClientObject.rpc.version" href="#webRpcJsonClientObject.rpc.version">&#x23;</a>
值为JSON-RPC协议版本："2.0"  
不应该修改这个值

### webRpcJsonClientObject.rpc.xcall("函数名",参数) <a id="webRpcJsonClientObject.rpc.xcall" href="#webRpcJsonClientObject.rpc.xcall">&#x23;</a>
调用远程函数。  
如果 varargs 属性指定为 true 时将不定个数参数合为数组，  
varargs 为 false 时直接发送参数  

远程函数调用成功则第一个返回值为表对象，  
└── 该对象的 result 字段为返回值，error 为错误对象，两个字段不会同时存在。  
└── error 对象的 message 为错误信息，code 为错误代码，data 为错误附加数据。  
└── 如果存在 error 对象，则第 2 个返回值为 error 对象的 JSON 文本格式。  
调用失败第一个返回值为 null ，第二个返回值为错误信息  

如果调用 rpc.beginTrans 函数开始一个批量调用，  
则返回一个可以指定 end 成员函数的对象，服务器应答时自动回调此 end 函数

## webRpcJsonClientObject.rpc 事件列表 <a id="webRpcJsonClientObject.rpcEvent" href="#webRpcJsonClientObject.rpcEvent">&#x23;</a>

### webRpcJsonClientObject.rpc.onError <a id="webRpcJsonClientObject.rpc.onError" href="#webRpcJsonClientObject.rpc.onError">&#x23;</a>
function(errMessage,rpcError){
    __/*出错时触发此函数，errMessage 为错误信息。  
如果服务端按 jsonrpc 协议返回 error 对象，  
则 rpcError 有值，包含 messge，code 字段。*/	
}
