其原理很简单,结构上基本不变,只是改变处理返回数据的方式.
1.text/html格式
这种返回类型处理很简单,直接就当作字符串用就行了.为了方便使用,封装成如下函数:
/**
* @function 利用ajax动态交换数据(text/html格式)
* @param url 要提交请求的页面
* @param jsondata 要提交的数据,利用json传递
* @param getmsg 这个函数可以获取到处理后的数据
*/
function ajaxtext(url,jsondata,getmsg)
{
//创建ajax对象,activexobject兼容ie5,6
var oajax = window.xmlhttprequest?new xmlhttprequest():new activexobject("microsoft.xmlhttp");
//打开请求
oajax.open('post',url,true);//方法,url,异步传输
//发送请求
var data = '';
for(var d in jsondata) //拼装数据
data = (d '=' jsondata[d] '&');
oajax.setrequestheader("content-type","application/x-www-form-urlencoded");
oajax.send(data);
//接收返回,当服务器有东西返回时触发
oajax.onreadystatechange = function ()
{
if(oajax.readystate == 4 && oajax.status == 200)
{
if(getmsg) getmsg(oajax.responsetext);
}
}
}
服务器端返回数据格式如下:
例如:
//返回的是xml格式
//header("content-type:text/xml;charset=utf-8");
//返回的是text或json格式
header("content-type:text/html;charset=utf-8");
//禁用缓存,是为了数据一样的前提下还能正常提交,而不是缓存数据
header("cache-control:no-cache");
$username = $_post['username']; //获取用户名
if(empty($username))
echo '请输入用户名';
else if($username == 'acme')
echo '用户名已被注册';
else
echo '用户名可用';
调用格式如下:
url = 'abc.php';
var jsondata={username:'acme',passw:'acme'};
ajaxtext(url,jsondata,getmsg);
function getmsg(msg)
{
//do something
}
2.xml格式
返回的是一个xml dom对象,解析其中的数据就类似于html dom 编程. 比如通过name获取标签对象(数组形式),再从该数组中获取需要的标签对象,再从标签对象中获取文本值.
函数如下:
/**
* @function 利用ajax动态交换数据(xml格式)
* @param url 要提交请求的页面
* @param jsondata 要提交的数据,利用json传递
* @param tagname 要获取值的标签名
* @param getmsg 这个函数可以获取到处理后的数据
*/
function ajaxxml(url,jsondata,tagname,getmsg)
{
//创建ajax对象,activexobject兼容ie5,6
var oajax = window.xmlhttprequest?new xmlhttprequest():new activexobject("microsoft.xmlhttp");
//打开请求
oajax.open('post',url,true);//方法,url,异步传输
//发送请求
var data = '';
for(var d in jsondata) //拼装数据
data = (d '=' jsondata[d] '&');
oajax.setrequestheader("content-type","application/x-www-form-urlencoded");
oajax.send(data);
//接收返回,当服务器有东西返回时触发
oajax.onreadystatechange = function ()
{
if(oajax.readystate == 4 && oajax.status == 200)
{
var oxml = oajax.responsexml; //返回的是一个xml dom对象
var otag = oxml.getelementsbytagname(tagname);
var tagvalue = otag[0].childnodes[0].nodevalue;
if(getmsg)getmsg(tagvalue);
}
}
}
服务器端返回数据格式如下:
例如:
//返回的是xml格式
header("content-type:text/xml;charset=utf-8");
//返回的是text或json格式
//header("content-type:text/html;charset=utf-8");
//禁用缓存,是为了数据一样的前提下还能正常提交,而不是缓存数据
header("cache-control:no-cache");
$username = $_post['username']; //获取用户名
if(empty($username))
echo '请输入用户名 '; //这些标签可以自定义
else if($username == 'acme')
echo '用户名已被注册 ';
else
echo '用户名可用 ';
调用格式如下:
var url = 'abc.php';
var jsondata = {username:'acme'};
ajaxxml(url,jsondata,'mes',getmsg);
function getmsg(msg)
{
//do something
}
3.返回json
函数如下:
/**
* @function 利用ajax动态交换数据(text/html格式),但是返回的是json类型的文本数据
* @param url 要提交请求的页面
* @param jsondata 要提交的数据,利用json传递
* @param getmsg 这个函数可以获取到处理后的数据
*/
function ajaxjson(url,jsondata,getmsg)
{
//创建ajax对象,activexobject兼容ie5,6
var oajax = window.xmlhttprequest?new xmlhttprequest():new activexobject("microsoft.xmlhttp");
//打开请求
oajax.open('post',url,true);//方法,url,异步传输
//发送请求
var data = '';
for(var d in jsondata) //拼装数据
data = (d '=' jsondata[d] '&');
oajax.setrequestheader("content-type","application/x-www-form-urlencoded");
oajax.send(data);
//接收返回,当服务器有东西返回时触发
oajax.onreadystatechange = function ()
{
if(oajax.readystate == 4 && oajax.status == 200)
{
var json = eval('(' oajax.responsetext ')');//把传回来的字符串解析成json对象
if(getmsg)getmsg(json);
}
}
}
服务器端返回数据格式如下:
例如:
//返回的是xml格式
//header("content-type:text/xml;charset=utf-8");
//返回的是text或json格式
header("content-type:text/html;charset=utf-8");
//禁用缓存,是为了数据一样的前提下还能正常提交,而不是缓存数据
header("cache-control:no-cache");
$username = $_post['username']; //获取用户名
if(empty($username))
echo '{"mes":"请输入用户名"}';
else if($username == 'acme')
echo '{"mes":"用户名已被注册"}';
else
echo '{"mes":"用户名可用"}';
调用格式如下:
url = 'abc.php';
var jsondata={username:'acme',passw:'acme'};
ajaxtext(url,jsondata,getmsg);
function getmsg(msg)
{
//do something
}
为了方便使用,可以把三个函数合并.合并后的函数如下:
/**
* @function 利用ajax动态交换数据
* @param url 要提交请求的页面
* @param jsondata 要提交的数据,利用json传递
* @param getmsg 这个函数可以获取到处理后的数据
* @param type 接受的数据类型,text/xml/json
* @param tagname type = xml 的时候这个参数设置为要获取的文本的标签名
* @return 无
*/
function ajax(url,jsondata,getmsg,type,tagname)
{
//创建ajax对象,activexobject兼容ie5,6
var oajax = window.xmlhttprequest?new xmlhttprequest():new activexobject("microsoft.xmlhttp");
//打开请求
oajax.open('post',url,true);//方法,url,异步传输
//发送请求
var data = '';
for(var d in jsondata) //拼装数据
data = (d '=' jsondata[d] '&');
oajax.setrequestheader("content-type","application/x-www-form-urlencoded");
oajax.send(data);
//接收返回,当服务器有东西返回时触发
oajax.onreadystatechange = function ()
{
if(oajax.readystate == 4 && oajax.status == 200)
{
if(type == 'text')
{
if(getmsg) getmsg(oajax.responsetext);
}
else if(type == 'json')
{
var json = eval('(' oajax.responsetext ')');//把传回来的字符串解析成json对象
if(getmsg)getmsg(json);
}
else if(type == 'xml')
{
var oxml = oajax.responsexml; //返回的是一个xml dom对象
var otag = oxml.getelementsbytagname(tagname);
var tagvalue = otag[0].childnodes[0].nodevalue;
if(getmsg)getmsg(tagvalue);
}
}
}
}
以上就是本文的全部内容,希望对大家的学习有所帮助,
怕瓦落地247