2008/01/25

[prototype.js] AJAX and SJAX Cool~

很久以前,公司有一個系統是用 Microsoft JVM 拿 Remote Scripting 做 Web 2.0 應用,

後來,慘了,Microsoft JVM 侵權,而且後來的 Sun JVM 又不支援,這個系統就一直被吊起來,

每次檢討會都是躂伐的重點項目,後來拿了 Filddler 仔細的研究了一下,其實應用到真正 Remote Scripting

還有一段距離,原理就不多說了,一句話,就是用 RSExecute(url,method,params a,b,c,d,e,.....) 來回傳 Server 物件。

後來研究了 Microsoft Altas (ASP.NET Ajax Extension) 及 Prototype Framework (prototype.js;http://www.prototypejs.org/)後,

決定使用 Prototype Framework,原因無他,還是一句話,支援 AJAX & SJAX !!!!

開始動心臟手術吧…

↓這是 Remote Scripting 的入口程式,從這邊動手先,將裡面的 invokeMethod 換掉!!

   1: function RSExecute(url,method)
   2: {
   3:     var cb, ecb, context;
   4:     var params = new Array;
   5:     var pn = 0;
   6:     var len = RSExecute.arguments.length;
   7:     for (var i=2; i < len; i++)
   8:         params[pn++] = RSExecute.arguments[i];
   9:     
  10:     return invokeMethod(url,method,params);
  11: }

↓這是改換成 Prototype ,換完後,就快了,很像 Remote Scripting 皮 Prototype 骨。

   1: function invokeMethod(url,method,params)
   2: {
   3:     var rtnValue=null;
   4:         if (url.length=0) {return;}
   5:         var action_url=buildURL(url,method,params);
   6:         var objAjax =new Ajax.Request(action_url, {
   7:           method: 'get',asynchronous:false,
   8:           onSuccess: function(transport) {
   9:             rtnValue = transport
  10:           }
  11:         });
  12:         return rtnValue;
  13: }

要注意 Line 7 中,有一個 Option 為 asynchronous:false,這是一個關鍵,這可以變成 SJAX 可以在 RSExecute 時回傳 Server 處理結果。

哇哈哈~這樣子就可以告別 Microsoft JVM 的毒害了。

謝謝收看。

 

相關文章:

黑暗大哥也提供 Altas SJAX version

http://www.ridgway.co.za/archive/2007/10/30/using-synchronous-asp.net-ajax-web-service-calls-and-scriptaculous-to.aspx

沒有留言: