為 moo.ajax 增加狀態處理
- Posted by Beata on 三月 9th, 2006 filed in javascript
上次介紹過 moo.fx這款輕巧靈活的 JSFramework。
其中的 moo.ajax 因為只能設定 onComplete 與 update Container 我覺得有點過於陽春了。
常用的 onLoading、404、500 等狀態處理在原始的 moo.ajax 並沒有附加上去,所以參考了Prototype原始版本的狀態處理方式替 moo.ajax 做了些修改。
使用的方式與原始的 moo.fx 差不多。
-
new ajax(url, {
-
postBody: params,
-
update: ‘commentlist’
-
onComplete: complete,
-
onLoading: loading,
-
on404: notFound,
-
on500: serveError,
-
});
-
// 其後再定義每個狀態處理的函式就行了,如下
-
function loading(request) {
-
alert(‘loading…’);
-
}
修改過後的 moo.fx
-
//based on prototype’s ajax class
-
//to be used with prototype.lite, moofx.mad4milk.net.
-
-
ajax = Class.create();
-
ajax.event = [‘Uninitialized’, ‘Loading’, ‘Loaded’, ‘Interactive’, ‘Complete’];
-
function emptyFunction() {}
-
ajax.prototype = {
-
initialize: function(url, options){
-
this.transport = this.getTransport();
-
this.options = options;
-
this.postBody = options.postBody || ”;
-
this.method = options.method || ‘post’;
-
this.update = $(options.update) || null;
-
this.request(url);
-
},
-
-
request: function(url){
-
this.transport.open(this.method, url, true);
-
this.transport.onreadystatechange = this.onStateChange.bind(this);
-
if (this.method == ‘post’) {
-
this.transport.setRequestHeader(‘Content-type’, ‘application/x-www-form-urlencoded’);
-
if (this.transport.overrideMimeType) this.transport.setRequestHeader(‘Connection’, ‘close’);
-
}
-
this.transport.send(this.postBody);
-
},
-
-
onStateChange: function(){
-
var event = ajax.event[this.transport.readyState];
-
if (event == ‘Complete’) {
-
setTimeout(function(){(this.options[‘on’ + this.transport.status] || emptyFunction)(this.transport);}.bind(this), 10);
-
if (this.transport.status == 200 && this.update)
-
setTimeout(function(){this.update.innerHTML = this.transport.responseText;}.bind(this), 10);
-
}
-
setTimeout(function(){(this.options[‘on’ + event] || emptyFunction)(this.transport);}.bind(this), 10);
-
-
if (event == ‘Complete’)
-
this.transport.onreadystatechange = function(){};
-
},
-
-
getTransport: function() {
-
if (window.ActiveXObject) return new ActiveXObject(‘Microsoft.XMLHTTP’);
-
else if (window.XMLHttpRequest) return new XMLHttpRequest();
-
else return false;
-
}
-
};
八月 22nd, 2006 at 12:45 上午
這樣子好用多了!謝謝你^^
十二月 2nd, 2006 at 5:07 下午
真的比較好