作者TonyQ (骨头)
看板Ajax
标题[请益]AJAX 运用
时间Wed Dec 27 12:30:35 2006
之前一直都是用request做呼叫的方式,
最近用function把我比较常用的处理部份包起来,
把讨厌的传值部分用Object物件作集合处理,
然後再把call back分成执行成功和网页开启失败两个模式,
另外可以在分POST和GET两种处理。
话说听说有很多AJAX的lib可以用,不过感觉都蛮高深的。哈
小弟我还是比较喜欢自己刻东西来用...(汗)
如果有兴趣能看完这些赘码的话,还请大大请多多指教(汗)
这边的讨论感觉上很不像一般的程式讨论区,文章很少实际code的讨论...
是因为AJAX的lib太成熟了,还是AJAX太简单......
btw, 刚看到web_design版规是整个把javascript整个画到AJAX板来了。XD
我所写的基本模型执行的范例码在下面,最下面则是我的简单function。
────────────────────────────────
function check()
{
var ValueObj=new Object();
if(!checkValue('school','请填写学校',0)) return false;
ValueObj["school"]=document.getElementById('school').value;
if(!checkValue('name','请填写姓名',0)) return false;
ValueObj["name"]=document.getElementById('name').value;
if(!checkValue('code','请输入检查码',0)) return false;
ValueObj["code"]=document.getElementById('code').value;
var cb_ok=function(str){ //str表示request取得的资料
document.getElementById('result').innerHTML=str;
}
var cb_err=function(str){
document.getElementById('result').innerHTML="网站目前无法开启!";
}
send_AJAX_Form("action_target.asp",ValueObj,"POST",cb_ok,cb_err);
//目标网页 可以改成GET
}
───myAJAx.js ───────────────────────
/* written by Tony1223 */
function getXMLHttpRequest(){
var request;
try {
request = new XMLHttpRequest();
} catch (trymicrosoft) {
try {
request = new ActiveXObject("Msxml2.XMLHTTP");
} catch (othermicrosoft) {
try {
request = new ActiveXObject("Microsoft.XMLHTTP");
} catch (failed) {
request = false;
}
}
}
if (!request)
alert("Error initializing XMLHttpRequest!");
return request;
}
function send_AJAX_Form(url,valueObj,method,cb_ok,cb_err){
if(url&&valueObj&&method&&cb_ok&&cb_err){
var request=getXMLHttpRequest();
if(method=='POST'){
var requestValue="";
var length=0;
for (var i in valueObj)
{
if(requestValue!="") requestValue+="&";
requestValue+=i+"="+escape(valueObj[i]);
length+= parseInt(escape(valueObj[i]).length);
}
request.open("POST", url, true);
request.setRequestHeader("content-length",length);
request.setRequestHeader("Content-Type",
"application/x-www-form-urlencoded");
request.onreadystatechange = function(){
callBackFunction(request,cb_ok,cb_err);
};
request.send(requestValue);
}else{ // "GET" Mode
var requestValue="";
for (var i in valueObj)
{
if(requestValue!="") requestValue+="&";
requestValue+=i+"="+escape(valueObj[i]);
}
if(requestValue.length>256){
alert('长度超过Get上限,无法送出!');
return false;
}
request.open("GET", url+"?"+requestValue, true);
request.onreadystatechange = function(){
callBackFunction(request,cb_ok,cb_err);
};
request.send(null);
}
}else{
alert('<url>,<valueObj>,<method>,<cbfunction>');
}
}
function callBackFunction(request,cb_ok,cb_err) {
if (request.readyState == 4) {
if (request.status == 200) {
cb_ok(request.responseText);
} else{
cb_err(request.responseText);
}
}
//alert('callback');
}
--
String temp="relax"; | Life just like programing
while(buringlife) String.forgot(temp); | to be right or wrong
while(sleeping) brain.setMemoryOut(); | need not to say
stack.push(life.running); | the complier will
stack.push(scouting.buck()); | answer your life
stack.push(bowling.practice()); | Bone
everything
--
※ 发信站: 批踢踢实业坊(ptt.cc)
◆ From: 220.134.27.68
※ 编辑: TonyQ 来自: 220.134.27.68 (12/27 12:30)
※ 编辑: TonyQ 来自: 220.134.27.68 (12/27 12:33)
※ 编辑: TonyQ 来自: 220.134.27.68 (12/27 12:35)
※ 编辑: TonyQ 来自: 220.134.27.68 (12/27 13:37)
1F:推 easyman:我ㄧ开始也是自己写, 不过後来用dojo比较方便 12/30 23:42