/**
对象只有get,post,特别直观
参数url input output option分别表示url,数据,显示内容的html控件ID,选项里设置超时处理等等
没详细测试,实际使用在tjzl.com用于discuz评分,但在那基础上修改后没测试
如果有建议请发到suxiang@126.com
*/
var suajax={};
//返回XMLHTTP的函数类型数据
suajax._factory = null;
suajax._factories = [
function() { return new XMLHttpRequest(); },
function() { return new ActiveXObject("Msxml2.XMLHTTP"); },
function() { return new ActiveXObject("Microsoft.XMLHTTP"); }
];
suajax.newRequest = function() {
if (this._factory != null) return this._factory();
for(var i = 0; i < this._factories.length; i++) {
try {
var factory = this._factories[i];
var request = factory();
if (request != null) {
this._factory = factory;
return request;
}
}
catch(e) {
continue;
}
}
this._factory = function() {
throw new Error("你的浏览器不支持XMLHTTP,请下载");
}
this._factory();
}
suajax._getFormData=function (form){
if(1==document.forms.length){
form=document.forms[0];
}else{
if(typeof form !='object'){
form=document.getElementById(form);
}
}
if(!form || 'FORM'!=form.tagName){
return (alert('debug form 对象不对'))
}
var es=form.elements;
var num=es.length;
var s='';
for(st='',i=0;i<num;i++,st='&'){
e=es[i];
if(!e.name){
continue;
}
if('select-multiple'==e.type){
var mult=(e.name.indexOf(']')>0)?'':'[]';
for (var n=0; n<e.length; n++) {
var op=e.options[n];
if (op.selected) {
s+=st+e.name+mult+'='+encodeURIComponent(op.value);
}
}
continue;
}
if('checkbox'==e.type || 'redio'==e.type){
if(!e.checked){
continue;
}
}
s+=st+e.name+'='+encodeURIComponent(e.value);
}
return s;
}
suajax._message=new Array('开始处理...','处理中...','处理出错');
suajax._show=function (output,text){
var htmlNode;
try{
htmlNode=document.getElementById(output);
}catch(e){}
if( ! htmlNode || ! text )return;
var tag=htmlNode.tagName;//tagname?type
switch(tag){
case 'INPUT'://input中有checkbox和redio情况,不能使用.value不过也用不到
case 'TEXTAREA':
case 'SELECT':
htmlNode.value =text;
break;// 这样写不对,对调试有好处好找到问题所在
case 'DIV':
case 'P':
case 'SPAN':
case 'TD':
htmlNode.innerHTML= text;
break;
default:
alert('debug 错误,检查tagName:'.tag);
break;
}
}
suajax._callback=function (request,output,timer){
if(4==request.readyState ){
if (timer) clearTimeout(timer);//取消时钟
if(200==request.status){
if(Function===output.constructor){
output(request.responseText);
return ;
}
if(String===output.constructor){
this._show(output , request.responseText);
return ;
}
}else{
//这里执行 处理错误
this._show(output ,this._message[2]+request.status+request.statusText);
}
}else{
this._show(output ,this._message[1]);
}
}
suajax.post=function(url,input,output,options){
var request = this.newRequest();
var sendData=( typeof input=='string' && input.indexOf("=")>0) ? input : this._getFormData(input);
var timer;
if (options.timeout){
timer = setTimeout(
function() {
request.abort();
if (options.timeoutHandler)
options.timeoutHandler(url);
} , options.timeout);
}
request.onreadystatechange=function (){
suajax._callback(request,output,timer);
};
request.open("POST",url,true);
request.setRequestHeader("Content-Type","application/x-www-form-urlencoded;");
request.send(sendData);
}
suajax.get=function(url,output,options){
var request = this.newRequest();
var timer;
url+=(url.indexOf('?')>-1) ? ('&t='+new Date().getTime()): ( '?t='+new Date().getTime() );
if (options.timeout){
timer = setTimeout(
function() {
request.abort();
if (options.timeoutHandler)
options.timeoutHandler(url);
} , options.timeout);
}
request.onreadystatechange =function (){
suajax._callback(request,output,timer);
};
request.open("GET",url );
request.send(null);
}
对象只有get,post,特别直观
参数url input output option分别表示url,数据,显示内容的html控件ID,选项里设置超时处理等等
没详细测试,实际使用在tjzl.com用于discuz评分,但在那基础上修改后没测试
如果有建议请发到suxiang@126.com
*/
var suajax={};
//返回XMLHTTP的函数类型数据
suajax._factory = null;
suajax._factories = [
function() { return new XMLHttpRequest(); },
function() { return new ActiveXObject("Msxml2.XMLHTTP"); },
function() { return new ActiveXObject("Microsoft.XMLHTTP"); }
];
suajax.newRequest = function() {
if (this._factory != null) return this._factory();
for(var i = 0; i < this._factories.length; i++) {
try {
var factory = this._factories[i];
var request = factory();
if (request != null) {
this._factory = factory;
return request;
}
}
catch(e) {
continue;
}
}
this._factory = function() {
throw new Error("你的浏览器不支持XMLHTTP,请下载");
}
this._factory();
}
suajax._getFormData=function (form){
if(1==document.forms.length){
form=document.forms[0];
}else{
if(typeof form !='object'){
form=document.getElementById(form);
}
}
if(!form || 'FORM'!=form.tagName){
return (alert('debug form 对象不对'))
}
var es=form.elements;
var num=es.length;
var s='';
for(st='',i=0;i<num;i++,st='&'){
e=es[i];
if(!e.name){
continue;
}
if('select-multiple'==e.type){
var mult=(e.name.indexOf(']')>0)?'':'[]';
for (var n=0; n<e.length; n++) {
var op=e.options[n];
if (op.selected) {
s+=st+e.name+mult+'='+encodeURIComponent(op.value);
}
}
continue;
}
if('checkbox'==e.type || 'redio'==e.type){
if(!e.checked){
continue;
}
}
s+=st+e.name+'='+encodeURIComponent(e.value);
}
return s;
}
suajax._message=new Array('开始处理...','处理中...','处理出错');
suajax._show=function (output,text){
var htmlNode;
try{
htmlNode=document.getElementById(output);
}catch(e){}
if( ! htmlNode || ! text )return;
var tag=htmlNode.tagName;//tagname?type
switch(tag){
case 'INPUT'://input中有checkbox和redio情况,不能使用.value不过也用不到
case 'TEXTAREA':
case 'SELECT':
htmlNode.value =text;
break;// 这样写不对,对调试有好处好找到问题所在
case 'DIV':
case 'P':
case 'SPAN':
case 'TD':
htmlNode.innerHTML= text;
break;
default:
alert('debug 错误,检查tagName:'.tag);
break;
}
}
suajax._callback=function (request,output,timer){
if(4==request.readyState ){
if (timer) clearTimeout(timer);//取消时钟
if(200==request.status){
if(Function===output.constructor){
output(request.responseText);
return ;
}
if(String===output.constructor){
this._show(output , request.responseText);
return ;
}
}else{
//这里执行 处理错误
this._show(output ,this._message[2]+request.status+request.statusText);
}
}else{
this._show(output ,this._message[1]);
}
}
suajax.post=function(url,input,output,options){
var request = this.newRequest();
var sendData=( typeof input=='string' && input.indexOf("=")>0) ? input : this._getFormData(input);
var timer;
if (options.timeout){
timer = setTimeout(
function() {
request.abort();
if (options.timeoutHandler)
options.timeoutHandler(url);
} , options.timeout);
}
request.onreadystatechange=function (){
suajax._callback(request,output,timer);
};
request.open("POST",url,true);
request.setRequestHeader("Content-Type","application/x-www-form-urlencoded;");
request.send(sendData);
}
suajax.get=function(url,output,options){
var request = this.newRequest();
var timer;
url+=(url.indexOf('?')>-1) ? ('&t='+new Date().getTime()): ( '?t='+new Date().getTime() );
if (options.timeout){
timer = setTimeout(
function() {
request.abort();
if (options.timeoutHandler)
options.timeoutHandler(url);
} , options.timeout);
}
request.onreadystatechange =function (){
suajax._callback(request,output,timer);
};
request.open("GET",url );
request.send(null);
}