2007-11-23
写个适合自己的RPC Engine
关键字: AJAX
学习了Swato之后,受到启发,对Zigzag Chen的代码作了点修改,写了个适合自己的RPC Engine:
简单的测试代码:
- // imports dependencies:
- GRS.loadJS("../jslib/3rdparty/prototype.js");
- GRS.loadJS("../jslib/3rdparty/json.js");
- Ext.namespace("GRS.rpc");
- /**
- * Constructor of GRS.rpc.Engine
- * @param url
- * @param options
- * @author Zhijie Chen <zigzag.chen@gmail.com>
- * @author Sam Chen (inspired by Zigzag Chen's swato-engine.js)
- * @version 1.0 11/22/2007
- */
- GRS.rpc.Engine = function(url,options) {
- this.url = url;
- this.conn_id = Math.floor(Math.random()*100000000);
- this.options = options;
- GRS.rpc.Engine.superclass.constructor.call(this)
- }
- Ext.extend(
- GRS.rpc.Engine,
- Ext.util.Observable,
- {call: function(catcher,serviceDotMethodName,params,options) {
- if ( this.url == null ) return;
- var serviceId=serviceDotMethodName.substring(0,serviceDotMethodName.indexOf("."));
- var methodName=serviceDotMethodName.substring(serviceDotMethodName.indexOf(".")+1,serviceDotMethodName.length);
- var option=new Object();
- Object.extend(option,options);
- option.onComplete=this._onRequestComplete.bind(catcher);
- new Ajax.Request(this.url+"/"+serviceId, this._requestOptions(serviceId.hashCode||serviceId,methodName,params,option));
- },
- fetch: function(catcher,url,options) {
- if ( url == null ) return;
- var option=new Object();
- Object.extend(option,options);
- option.onComplete=this._onRequestComplete.bind(catcher);
- new Ajax.Request(url,option);
- },
- send: function(catcher,jsObject,remoteObjectID,options) {
- this.call(catcher,remoteObjectID,'',[jsObject],options);
- },
- _requestOptions: function(remoteObjectID,methodName,params,options) {
- var sendingData={
- "params":params,
- "method":methodName,
- "id":remoteObjectID,
- "conn_id":this.conn_id};
- var requestOptions=new Object();
- Object.extend(requestOptions,this.options);
- Object.extend(requestOptions,options);
- requestOptions.parameters=JSON.stringify(sendingData);
- return requestOptions;
- },
- _onRequestComplete : function(response) {
- if (response.status != 200) {
- return;
- }
- eval("var error = " + response.responseText.error);
- if (error!=undefined) {
- if (this.failure!=null) {
- // call the failure handler
- this.failure.apply(this, [error]);
- } else {
- alert("Warning from rpc.js : Error occurred and no error handler defined.");
- }
- } else {
- if (this.success!=null){
- // call the success handler:
- this.success.apply(this, [response.responseText]);
- }
- }
- }
- }
- );
- // global rpcengine
- rpcengine=new GRS.rpc.Engine("/RPCServlet");
简单的测试代码:
- <script type="text/javascript" charset="UTF-8" src="../../3rdparty/ext-2.0-beta1/adapter/ext/ext-base.js"></script>
- <script type="text/javascript" charset="UTF-8" src="../../3rdparty/ext-2.0-beta1/ext-all.js"></script>
- <script type="text/javascript" charset="UTF-8" src="../grsframework-core.js"></script>
- <script type="text/javascript" charset="UTF-8" src="../rpc.js"></script>
- <script>
- var handler={
- success:function(ret){
- alert("testRPC.html :: Result :: " + ret);
- },
- failure:function(err){
- alert("Err occurred : " + err);
- }
- };
- window.onload = function() {
- alert("testing rpcengine...");
- rpcengine.call(handler,"userManager.getUserList",[]);
- }
- </script>
发表评论
提醒: 该博客已发表在公共论坛,博客所有留言会成为论坛回贴,留言请注意遵守论坛发贴规则
- 浏览: 3429 次
- 性别:

- 来自: 上海

- 详细资料
搜索本博客
我的相册
MyDesktop.zh
共 17 张
共 17 张
最近加入圈子
最新评论
-
浅谈基于ExtJS的AJAX程序 ...
楼主能把其他的代码共享吗
-- by renhaimm -
浅谈基于ExtJS的AJAX程序 ...
引用 commond 2008-06-30 想问下楼主,如果没有server的 ...
-- by sam.ds.chen -
浅谈基于ExtJS的AJAX程序 ...
想问下楼主,如果没有server的支持,纯粹使用ext进行国际化,而又不整个刷新 ...
-- by commond -
浅谈基于ExtJS的AJAX程序 ...
EXT真是个好东西,可惜License问题是个问题。
-- by 笑 喘 -
小心js中的逗号
zhujinju 写道stworthy 写道写到前面比较难看了,用比较好的JS编 ...
-- by sunjohn






评论排行榜