[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