﻿/*AjaxApp扩展应用
接受参数:无/ajax对象
返回类型:无

应用技术：
javascript、ajax

制作人：
黄若儒 Roy.Huang

注意:
1、本对象通过Extend继承自AjaxControl，因此需要导入Extend.js、AjaxControl.js文件，否则某些方法不能运行
2、本对象拥有AjaxControl的所有方法，可通过Super获取AjaxControl的引用
3、本应用库用于执行AJAX相关的日常操作
4、本对象应用分实例化应用以及对象化应用
5、异步提交表单方法有两种,submitFormA使用相对容易，但不能上传文件，submitFormI控制比较麻烦（需要通过iFrame.contentDocument|iFrame.Document获取页面对象）
6、全部采用静态/prototype写法，方便继承重载
*/
var AjaxApp=function(){};

try{//执行继承,设置命名空间
	Class.extendPrototype(AjaxApp,Class.getClass("org.developerworld.net.AjaxControl"));
	Class.extendStatic(AjaxApp,Class.getClass("org.developerworld.net.AjaxControl"));
	Class.setNameSpace("org.developerworld.net.AjaxApp",AjaxApp);
}
catch(e){
	alert("无法继承AjaxControl");
}

//==============================实例化方法==============================
AjaxApp.prototype.encode="uft-8";//设置编码

AjaxApp.prototype.iFrame=null;//存放iFrame对象

AjaxApp.prototype.getText=function(){//获取文本数据
	return this.ajax.responseText;
};

AjaxApp.prototype.getXml=function(){//获取返回xml数据
	return this.ajax.responseXML;
};

AjaxApp.prototype.getJson=function(){//获取返回json数据
	eval("var rst="+this.ajax.responseText);
	return rst;
};

AjaxApp.prototype.doGet=function(url,asynchronous,username,password){//进行以get方式提取数据
	this.abort();
	AjaxApp.doGet(this.ajax,url,asynchronous,username,password);
}

AjaxApp.prototype.doPost=function(url,parameter,asynchronous,username,password){//进行以post方式提取数据
	this.abort();
	AjaxApp.doPost(this.ajax,url,parameter,asynchronous,username,password);
}

AjaxApp.prototype.submitFormA=function(form,asynchronous,username,password){//Ajax异步提交表单
	this.abort();
	AjaxApp.submitFormA(this.ajax,form,asynchronous,this.encode,username,password);
}

AjaxApp.prototype.submitFormI=function(form){//iFrame异步提交表单
	if(!this.iFrame){
		var time=(new Date()).getTime();
		this.iFrame="<iframe name=\"iFrameN_"+time+"\" id=\"iFrameI_"+time+"\" style=\"display:none\"></iframe>";
		if(!form.parentNode)
			document.write(this.iFrame);
		else{
			var div=document.createElement("div");
			div.innerHTML=this.iFrame;
			form.parentNode.appendChild(div);
		}
		this.iFrame=document.getElementById("iFrameI_"+time);
	}
	AjaxApp.submitFormI(this.iFrame,form,this.onComplete);
}

//==============================静态方法==============================
AjaxApp.doGet=function(ajax,url,asynchronous,username,password){//进行以get方式提取数据
	ajax.open("get",url,asynchronous,username,password);
	ajax.send(null);
}

AjaxApp.doPost=function(ajax,url,parameter,asynchronous,username,password){//进行以post方式提取数据
	ajax.open("post",url,asynchronous,username,password);
	ajax.setRequestHeader("Content-Type","application/x-www-form-urlencoded");
	ajax.send(parameter);
}

AjaxApp.submitFormA=function(ajax,form,asynchronous,encode,username,password){//Ajax异步提交表单
	var parameter=AjaxApp.getFormParameter(form,encode);
	if(form.method && form.method.toUpperCase()=="POST"){
		ajax.open("post",form.action,asynchronous,username,password);
		ajax.setRequestHeader("Content-Type","application/x-www-form-urlencoded");
		ajax.send(parameter);
	}
	else{
		ajax.open("get",form.action+"?"+parameter,asynchronous,username,password);
		ajax.send(null);
	}
}

AjaxApp.submitFormI=function(iFrame,form,onComplete){//iFrame异步提交表单
	var base=this;
	if(iFrame.addEventListener)//for fireFox/opera
		iFrame.addEventListener("load",onComplete,false);
	else if(iFrame.attachEvent)//for ie
		iFrame.attachEvent("onload",onComplete);
	else//other
		iFrame.onload=onComplete;
	form.target=iFrame.name;
	form.submit();
}

AjaxApp.getFormParameter=function(form,encode){//获取表单元素的名值对
	var p="";
	var e=null;
	for(var i=0;i<form.elements.length;i++){
		e=form.elements[i];
		if((e.type.toLowerCase()=="radio" || e.type.toLowerCase()=="checkbox") && !e.checked) continue;
		if(typeof(encodeURIComponent)=="undefined" || (encode!=null && encode.toUpperCase()!="UTF-8"))
			p+=escape(e.name)+"="+escape(e.value)+"&";
		else
			p+=encodeURIComponent(e.name)+"="+encodeURIComponent(e.value)+"&";
	}
	if(p.length>0)
		p=p.substring(0,p.length-1);
	return p;
}