最简单的ajax
来源:互联网 发布:java 方法签名 throw 编辑:程序博客网 时间:2024/05/01 19:26
/**
对象只有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);
}
- 最简单的ajax
- 最简单的ajax例子
- 最简单的ajax应用
- 最简单的Ajax例子
- ajax的最简单实现
- 最简单的ajax实例
- 最简单的ajax例子
- JAVASCRIPT 最简单的 AJAX
- 最简单的JQuery + AJAX
- 最简单的Ajax,Ajax入门
- [AJAX]有史以来最简单的AJAX回调库
- 一个最简单的ajax例子
- 一个最简单的ajax+jquery
- 有史以来最简单的AJAX回调库
- 最简单的Ajax框架源代码
- ajax最简单的一个实例
- 最简单的Ajax入门例程
- 最简单的 ajax Loading 效果
- RSS网络爬虫的时间规则
- 搜索引擎创新论
- 断言函数assert()
- People come into your life for a reason
- C++的const关键字
- 最简单的ajax
- 端口整合Apache和Tomcat
- 善待自己的恻隐之心
- Oracle中的数据字典技术初级入门
- 不是为了生气而种兰花
- 实施配置 b/s 架构 webERP
- WinCE 流接口驱动加载流程
- Visual Studio 2008 每日提示(十五)
- Nginx 0.7.x + PHP 5.2.8(FastCGI)搭建胜过Apache十倍的Web服务器(第4版)