json rpc 详细协议链接
var JsonRpcClient = function(config) // url , method ,callback this there parameters is mandatory
{
//private data
var _callbackObj = {};
var _reqRespMapping = [];
var _createId = function()
{
return ""+(new Date()).getTime();
};
var _send = function(jsonData)
{
var _sync=false;
if(config.sync) _sync=config.sync;
Ext.Ajax.request({
method:'POST',
url: config.url,
sync:_sync,
success: function(res)
{
response = Ext.decode(res.responseText);
_reqRespMapping.remove(response.id);
if(config.callback)
{
config.callback(response);
}
},
failure: function()
{
_reqRespMapping.remove(jsonData.id);
if(config.callback)
{
config.callback({"error":true,result:''});
}
},
jsonData : jsonData,
headers:{"Content-Type":"application/json-rpc;charset=UTF-8"}
});
};
this[config.method]=function()
{
var id = _createId();
var args = [];
for(var i=0;i<arguments.length;i++)
{
args[i]=arguments[i];
}
var jsonRpcReq = {
method: config.method,
params: args,
id: id
};
_reqRespMapping[id] = jsonRpcReq;
_send(jsonRpcReq);
}
}
在使用jsonplugin 会遇到协议头的解析错误,原因是Ext.Ajax 对协议头重复和错误包装,可以复写initHeader 方法达到协议的头正确设置代码如下:
Ext.lib.Ajax.initHeader=function(label, value, isDefault)
{
var headerObj = (isDefault) ? this.defaultHeaders : this.headers;
if (headerObj[label] === undefined) {
headerObj[label] = value;
}
else {
headerObj[label] = headerObj[label] + "," + value;// 新协议头的定义放到最后面
}
if (isDefault) {
this.hasDefaultHeaders = true;
}
else {
this.hasHeaders = true;
}
}
js 调用也非常的简单
var client=new JsonRpcClient({url:'xxx.action',method:'xxxmethod',sync:true,callback:function(res){});
client.xxxmethod();
首先初始化一个 rpc cilent ;
method :远程方法名
sync :是否同步调用
callback : 回调函数
初始化完毕 cilent 就是调用远程的方法了。
JSON-RPC客户端实现
本文介绍了一种基于JSON-RPC协议的客户端实现方法,并提供了一个简单的JavaScript示例,包括如何初始化客户端、设置同步请求及回调函数等关键步骤。
1784

被折叠的 条评论
为什么被折叠?



