Từ khi phpbasic có thay đổi, mình chưa kịp post bài nào, hôm n
ay khởi động lại.
Trong phpbasic này chắc hẳn mọi người đều đã xử dụng qua ajax.
Nhưng ít người để ý đến kỹ thuật cùng một lúc request nhiều lần. Có thể các bạn đã dùng rồi nhưng không để ý, bởi vì trong các thư viện JS họ cũng hỗ trợ luôn cái này.
Mục đích của kỹ thuật này là làm tăng tốc độ trang web.
VD các bạn có thể tưởng tượng 1 tình huống cần thay đổi cùng một lúc nội dung của 10 div độc lập, theo 10 url khác nhau. Bình thường mọi người sẽ phải làm lần lượt từng div một, như vậy sẽ lâu hơn so với việc request một lúc 10 div.
Sau đây là code :
<?
function Request()
{
if(arguments.length==1) {
var ADN = new Object();
var Ajax = new Object();
this.options = new function()
{
this.address = null;
this.method = "POST";
this.data = null;
this.abort = null;
this.onRequest = null;
this.onSuccess = null;
this.onFailure = null;
};
for (var i in this.options){ADN[i]=this.options[i];}
for (var i in arguments[0]){ADN[i]=arguments[0][i];}
function createRequest(){
if (window.ActiveXObject){Ajax = new ActiveXObject("Microsoft.XMLHTTP");}
else{Ajax = new XMLHttpRequest();}
}
function isReady(){return(Ajax.readyState==4 || Ajax.readyState==0);}
function isComplete(){return Ajax.readyState==4;}
function isSuccess(){return((Ajax.status >= 200) && (Ajax.status < 300));}
function setHeader(){
if (ADN.method.toUpperCase()=="POST"){
Ajax.setRequestHeader("Content-type", "application/x-www-form-urlencoded");
Ajax.setRequestHeader("Content-length", ADN.data.length);
Ajax.setRequestHeader("Connection", "close");
}
}
function fixMethod(){
}
//xu li theo tien trinh
function processRequest(){
if (!isReady()){
if (typeof ADN.onRequest=="function"){ADN.onRequest.call(Ajax);}
else {eval(ADN.onRequest);}
}
if (isComplete()){
if (isSuccess()){
if (typeof ADN.onSuccess=="function"){ADN.onSuccess.call(Ajax);}
else {eval(ADN.onSuccess)}
}
else{
if (typeof ADN.onFailure=="function"){ADN.onFailure.call(Ajax);}
else {eval(ADN.onFailure)}
}
}
}
//ket thuc xu li
//bat dau thuc hien request
createRequest();
if (isReady()){
if (ADN.data!=nullADN.method.toUpperCase()=="POST" && ADN.data!="" ){
Ajax.open("POST",ADN.address, true);
setHeader();
Ajax.send(ADN.data);
}
else{
Address = ADN.address+"?"+ADN.data;
Ajax.open("GET",Address,true);
Ajax.send(null);
}
}
Ajax.onreadystatechange = processRequest;
}// end if
}// ket thuc lop request
?>
Hàm này được viết để chấp nhận cả 2 các phương thức request thông thường là POST và GET.
Cách thức sử dụng giống như trong Prototype.
VD: để tạo một request mới :
var one = new Request({
address: "response.ajax.php",
method: "POST",
data: "post=b",
onSuccess: function() {alert(this.responseText)},
onFailure : function() {alert("có lỗi")}
});
Các bạn tham khảo qua, có gì góp ý cho mình.
Tác giả:uoon
