日期:2014-05-16  浏览次数:20422 次

JS中AJAX的简单应用

??? 最近了解了一下JS中AJAX的应用,总结一下,以备今后不时之需。

一. 创建XHR对象:

/**
 * 创建XMLHttpRequest对象
 **/
function createXmlHttpRequest(){
	var xmlhttp = null;
	try{
		xmlhttp = new XMLHttpRequest();
	}catch(e){  
		//IE7.0一下版本浏览器以ActiveX组件方式创建XMLHttpRequest对象
		var MSXML = ['MSXML2.XMLHTTP.6.0', 'MSXML2.XMLHTTP.5.0', 'MSXML2.XMLHTTP.4.0', 'MSXML2.XMLHTTP.3.0', 'MSXML2.XMLHTTP', 'Microsoft.XMLHTTP'];
		for(var i=0; i<MSXML.length; i++){
			try{
				xmlhttp = new ActiveXObject(MSXML[i]);
				break;	
			}catch(e){}
		}
	}
	
	return xmlhttp;
}

?

二. 以GET方式发送数据

/**
 * 利用ajax校验用户名的重复性
 * get方式
 **/
function checkUserByAjaxGet(){
	var groupName = $("GroupName");
	//创建XHR对象
	var xhr = createXmlHttpRequest();
	//设置一个针对readystatechange事件的监听函数
	xhr.onreadystatechange = function(){
		if(xhr.readyState == 4){
			if(xhr.status == 200 || xhr.status == 304){
				if(xhr.responseText == '1'){
					var msg = '已存在此用户组,请修改';
				}else{
					var msg = '此用户组可用';
				}				
				var span = document.createElement("span");
				span.innerHTML = "<font color='red'>" + msg + "</font>";
				groupName.parentNode.appendChild(span);
			}
		}
	}
	//GET方式提交
	xhr.open('GET', '/groups/checkUser?name='+groupName.value, true);
	xhr.send(null);
}

?

三. 以POST方式发送数据

/**
 * 利用ajax校验用户名的重复性
 * post方式
 **/
function checkUserByAjaxGet(){
	var groupName = $("GroupName");
	//创建XHR对象
	var xhr = createXmlHttpRequest();
	//设置一个针对readystatechange事件的监听函数
	xhr.onreadystatechange = function(){
		if(xhr.readyState == 4){
			if(xhr.status == 200 || xhr.status == 304){
				if(xhr.responseText == '1'){
					var msg = '已存在此用户组,请修改';
				}else{
					var msg = '此用户组可用';
				}				
				var span = document.createElement("span");
				span.innerHTML = "<font color='red'>" + msg + "</font>";
				groupName.parentNode.appendChild(span);
			}
		}
	}
	//准备一个post连接(post方式提交)
	xhr.open('post', '/groups/checkUser', true);
	xhr.setRequestHeader('Content-Type', 'application/x-www-form-urlencoded');
	//发起请求
	xhr.send('name='+groupName.value);	
}

?

四. 返回XML格式数据信息

/**
 * 利用ajax校验用户名的重复性
 * 返回xml格式解析
 **/
function checkUserByAjaxXml(){
	var groupName = $("GroupName");
	var xhr = createXmlHttpRequest();
	xhr.onreadystatechange = function(){
		if(xhr.readyState == 4){
			if(xhr.status == 200 || xhr.status == 304){
				var ret = xhr.responseXML;
				var flag = ret.getElementsByTagName('flag')[0].firstChild.nodeValue;
				var msg = ret.getElementsByTagName('msg')[0];
				$("tip").innerHTML = "<font color='red'>"+msg.firstChild.nodeValue+"</font>";
				if(flag != 0){
					groupName.value = '';
					groupName.focus();
				}
			}
		}
	}
	xhr.open('GET', '/groups/checkUserXml?name='+groupName.value, true);
	xhr.send(null);
}

?对应目标处理端:

header("Content-Type:text/xml; charset=utf-8");
$xml = '<?xml version="1.0" encoding="utf-8" ?>';
$xml .= '<result>';
$xml .= '<flag>'.$flag.'</flag>';
$xml .= '<msg>'.$msg.'</msg>';
$xml .= '</result>';
echo $xml;exit;

?FireBug前端捕获:

?

五. 返回 JSON 格式数据信息:

/**
 * 利用ajax校验用户名的重复性
 * 返回Json格式解析
 **/
function checkUserByAjaxJson(){
	var groupName = $("GroupName");
	var xhr = createXmlHttpRequest();
	xhr.onreadystatechange = function(){
		if(xhr.readyState == 4){
			if(xhr.status == 200 || xhr.status == 304){
				//var ret = eval('('+xhr.responseText+')');				
				var ret = JSON.parse(xhr.responseText);
				$("tip").innerHTML = "<font color='red'>"+ret.msg+"</font>";
				if(ret.flag != 0){
					groupName.value = '';
					groupName.focus();
				}
			}
		}
	}
	xhr.open('GET', '/groups/checkUserJso