lwcompany

功到自然成

  博客园 :: 首页 :: 博问 :: 闪存 :: 新随笔 :: 联系 :: :: 管理 ::

1.ajax基础

                        ajax是多种技术的综合,它使用xhtml和css标准化呈现,使用DOM进行动态显示和交互,使用xml和xstl进行数据交换和处理,使用XMLHttpRequest对象进行异步数据读取,

                       使用 javascript绑定和处理所有数据.

         1.ajax的工作原理

                   传统WEB应用工作原理

                     传统web

                   服务器接收并处理传来的表单,然后返回一个新的网页到用户浏览器。如图9.1所示的就是传统Web应用的工作原理。使用传统Web应用时若要改变页面的一小部分数据,

                   要重新加载整个页面,这是一种不友好的用户体验。而且由于每次应用的交互都需要向服务器发送请求,应用的响应时间依赖于服务器的响应时间,这有可能导致用户花

                   费较长的等待时间。

                   AJAX引擎的工作原理

                     ajax引擎

                    优点:在不更新整个页面的前提下维护数据,减少服务器负担,减轻带宽压力,更快的响应速度.

                    缺点:  局部更新不支持后退功能,搜索引擎不支持ajax的抓取,跨平台性不好。

       2.AJAX初始化

                    要实现AJax引擎的初始化,首先建立一个JAVASCRIPT对象,对象的名称为XMLHttpRequest.XMLHttpRequest是由浏览器提供一个组件。

                    不同的浏览器使用不同方法创建XMLHttpRequest对象。IE使用ActiveXObject   ,其他浏览器使用XMLHttpRequest的JAVASCRIPT内建对象。

                     例如,以下代码将创建一个XMLHttpRequest对象

<?php
//实现AJAX引擎
?>
<script>
var XMLHttp=null		//创建一个作为XMLHttpRequest对象使用的XMLHttp变量
if (window.XMLHttpRequest)	//判断XMLHttpRequest对象是否可用
{
	                         //如果可用则创建一个新的XMLHttpRequest对象
	XMLHttp=new XMLHttpRequest()
}
else if (window.ActiveXObject)	//判断ActiveXObject是否可用
{
                         	//如果可用则使用Microsoft.XMLHTTP组件来创建XMLHttpRequest对象
	XMLHttp=new ActiveXObject("Microsoft.XMLHTTP")
}
</script>
    3.发送HTTP请求
           

                        AJAX初始化后,就可以向服务器发送HTTP请求。通过调用XMLHttpRequest对象的open()和send()方法即可实现这一功能。

                        open()方法的作用是建立对服务器的调用。语法格式如下:

                        XMLHttp.open("method","url"[,flag])

                        说明:method参数可以是GET或POST,对应表单的GET和POST方法。url参数是页面要调用的地址,可以是相对URL或绝对URL。flag参数是一个标记位,如果为true表示在

                        等待被调用页面响应的时间内可以继续执行页面代码,为false则相反,默认为true。

                        open()方法调用完后要调用send()方法,send()方法的作用是向服务器发送请求,语法格式如下:

                        XMLHttp.send(content)

      4.指定响应函数

                        发送服务器请求后,需要指定当服务器返回信息时客户端的处理方式。这是只要将相应的处理函数的名称赋给XMLHttpRequest对象的onreadystatechange属性即可。

                        每当状态改变时都会触发这个事件处理器,通常会调用一个JavaScript函数。例如:

                        XMLHttp.onreadystatechange=function_name

                        XMLHttp为创建的XMLHttpRequest对象。函数名称function_name不加括号,不指定参数。也可以使用JavaScript即时定义函数的方法来定义相应函数,例如:

XMLHttp.onreadystatechange=function()

{

//代码

}

       5处理服务器返回的信息

                       在进行操作前,处理函数首先需要判断请求目前的状态。表示请求状态的是XMLHttpRequest对象的readyState属性。通过判断该属性的值就可以知道请求的状态。

                       有5个可取值:“0”表示未初始化,“1”表示正在加载,“2”表示已加载,“3”表示交互中,“4”表示完成。

                       readyState属性的值为4时,表示服务器已经传回了所有信息,可以开始处理信息并更新页面内容了。例如

if(XMLHttp.readyState==4)
{
	//处理信息
}
else
{
	window.alert("请求还未成功");
}

 

                        服务器返回信息后需要判断服务器的HTTP状态码,确定返回的页面没有错误。通过判断XMLHttpRequest对象的status属性的值即可得到HTTP状态码。

                        如200表示OK(成功),404表示Not Found(未找到)

if(XMLHttp. status==200)
{
	//页面正常
}
else
{
	window.alert("页面有问题");
}

                    

                        XMLHttpRequest对象的statusTextHTTP属性保存了HTTP状态码的相应文本,如OK或Not Found等。

                        XMLHttpRequest对成功返回的信息有两种处理方式:

                       ●responseText。将传回的信息当字符串使用。

                        responseXML。将传回的信息当XML文档使用,可以用DOM处理

2.php与ajax交互

            1.使用GET方式

                        例9.1 使用GET方式发送请求时,在open()方法的url参数中要包含需要传递的参数,url的格式如下:

                                url="xxx.php?参数1=值1&参数2=值2&…"

                                请求发送后服务器端将在xxx.php页面中进行数据处理,之后将该页面的输出结果返回到本页面中。整个过程浏览器页面一直是本页面的内容,页面没有刷新。

                                下面以一个具体的实例来介绍如何使用GET方式发送请求。

                               【例9.1】 使用GET方式实现一个简单的服务器请求,通过输入的学生的学号和课程名,查看学生的成绩(本例使用MySQL数据库)。

                新建ex9_1_main.php

<html>
<head>
<meta http-equiv="Content-Type" content="text/html; charset=gb2312" />
<title>AJAX Example</title>
<script>
//AJAX初始化函数
function GetXmlHttpObject()
{
	var XMLHttp=null;
	try
 	{
		XMLHttp=new XMLHttpRequest();
 	}
	catch (e)
 	{
 		try
  		{
 			XMLHttp=new ActiveXObject("Msxml2.XMLHTTP");
 		}
		catch (e)
 		{
  			XMLHttp=new ActiveXObject("Microsoft.XMLHTTP");
  		}
 	}
	return XMLHttp;
}
function cj_query()
{
	XMLHttp=GetXmlHttpObject();			//初始化一个XMLHttpRequest对象
	//得到学号和课程名文本框中输入的值
	var XH=document.getElementById("XH").value;
	var KCM=document.getElementById("KCM").value;
	var url="EX9_1_process.php";			//服务器端在EX9_1_process.php中处理
	url=url+"?XH="+XH+"&KCM="+KCM; 	//url地址,以GET方式传递
	url=url+"&sid="+Math.random();  		//添加一个随机数,以防服务器使用缓存的文件
	XMLHttp.open("GET",url, true);    		//以GET方式通过给定的url打开XMLHTTP对象
	XMLHttp.send(null);       			//向服务器发送HTTP请求,请求内容为空
	XMLHttp.onreadystatechange = function()	//定义响应处理函数
		{
			if (XMLHttp.readyState==4&&XMLHttp.status==200) 
			{ 	
				//如果请求成功则在CJ文本框中显示EX9_1_process.php传回的信息
				document.getElementById("CJ").value=XMLHttp.responseText;
			}    
		}
}
</script>
</head>
<body>
<form action="">
学号:<input type="text" name="XH" size="12">
课程名:<input type="text" name="KCM" size="12">
<input type="button" value="查询" onClick="cj_query();"><br>
成绩:<input type="text" name="CJ" size="12">
</form>
</body>
</html>

            新建EX9_1_process.php

<html>
<head>
<meta http-equiv="Content-Type" content="text/html; charset=gb2312" />
<title>AJAX Example2</title>
<script>
//初始化函数
function GetXmlHttpObject()
{
	var XMLHttp=null;
	try
 	{
		XMLHttp=new XMLHttpRequest();
 	}
	catch (e)
 	{
 		try
  		{
 			XMLHttp=new ActiveXObject("Msxml2.XMLHTTP");
 		}
		catch (e)
 		{
  			XMLHttp=new ActiveXObject("Microsoft.XMLHTTP");
  		}
 	}
	return XMLHttp;
}
//单击【查询】按钮触发run()函数
function run()
{
	XMLHttp=GetXmlHttpObject();
	var XH=document.getElementById("XH").value;		//得到“学号”文本框中输入的值
	var XM=document.getElementById("XM").value;		//得到“姓名”文本框中输入的值
	var url="EX9_2_process.php";					//服务器端在EX9_2_process.php中处理
	var poststr="XH="+XH+"&XM="+XM; 			//url地址,以POST方式传递
	XMLHttp.open("POST",url,true);    				//以POST方式打开XMLHTTP对象	
	XMLHttp.setRequestHeader("Content-Type","application/x-www-form-urlencoded");	//设置头信息
	XMLHttp.send(poststr);       					//向服务器发送HTTP请求
	XMLHttp.onreadystatechange = function()			//定义响应处理函数
		{
			if (XMLHttp.readyState==4&&XMLHttp.status==200) 
			{ 	
				//如果“学号”文本框内容为空则提示“学号未填”
				if(XH=="")					
				{
					window.alert("学号未填");
				}
				else
				{
					//如果接收到的字符串为“1”表示学号已存在
					if(XMLHttp.responseText=="1")	
					{
						//设置id为“txthimt”的标记要显示的信息
						document.getElementById("txthint").innerHTML="学号已存在";
					}
					//如果接收到的字符串为“0”表示学号不存在
					else if(XMLHttp.responseText=="0")						
					{
						document.getElementById("txthint").innerHTML="学号未被使用";
					}
				}
			}
		}
}
</script>
</head>
<body>
<form>
<table bgcolor="#CCCCCC" width="280" border="1" align="center" cellpadding="0" cellspacing="0">
<tr><td width="90">学号:</td>
	<td><input type="text" name="XH" size="15">
	<input type="button" name="select" value="检测" onClick="run();"></td></tr>
<tr><td bgcolor="#CCCCCC" width="90">姓名:</td>
	<td><input name="XM" type="text" size="15"></td></tr>
<tr><td>性别:</td>
	<td><input type="radio" name="XB" value="1">男
		<input type="radio" name="XB" value="0">女</td></tr>
		<tr><td align="center" colspan="2">
	<input type="submit" name="cmdINSERT" value="添加"></td></tr>
</table>
</form>
<!-- 设置id为"txthint"的div标记,用于显示返回信息 -->
<font color="red"><div id="txthint" align="center"></div></font>
</body>
</html>
3.简单实例-AJAX

            【例9.3】 从MySQL数据库中取出学生管理系统的专业列表,放入下拉框中,当选择某个专业时,下拉框下方将显示所有属于该专业的学生学号。

                  AJAX的应用

               ex9_3_main.php

<html>
<head>
<meta http-equiv="Content-Type" content="text/html; charset=gb2312" />
<title>AJAX Example3</title>
<script>
//初始化函数
function GetXmlHttpObject()
{
	var XMLHttp=null;
	try
 	{
		XMLHttp=new XMLHttpRequest();
 	}
	catch (e)
 	{
 		try
  		{
 			XMLHttp=new ActiveXObject("Msxml2.XMLHTTP");
 		}
		catch (e)
 		{
  			XMLHttp=new ActiveXObject("Microsoft.XMLHTTP");
  		}
 	}
	return XMLHttp;
}
//选择列表框中选项时触发redirec()函数
function redirec()
{
	XMLHttp=GetXmlHttpObject();
	var ZY=document.getElementById("s").value;		
	var url="EX9_3_process.php";				//服务器端在EX9_3_process.php中处理
	url=url+"?ZY="+ZY; 						//url地址,以GET方式传递
	url=url+"&sid="+Math.random();  			//添加一个随机数,以防服务器使用缓存的文件
	XMLHttp.open("GET",url,true);    			//通过GET方式打开XMLHTTP对象	
	XMLHttp.send(null);       				//向服务器发送HTTP请求,请求内容为空
	XMLHttp.onreadystatechange = function()		//定义响应处理函数
		{
			if (XMLHttp.readyState==4&&XMLHttp.status==200) 
			{ 	
				//在"txthint"上显示返回信息
				document.getElementById("txthint").innerHTML=XMLHttp.responseText;
			}    
		}
}
</script>
</head>
<body>
<form name="frm">
<select name="s" onChange="redirec()">
	<option selected>请选择</option>
	<?php 
	$conn=mysql_connect("localhost","root","123456");		//连接MySQL服务器
	mysql_select_db("PXSCJ",$conn);					//选择PXSCJ数据库
	mysql_query("SET NAMES gb2312");				//将字符集设为gb2312
	$sql="select distinct 专业 from XSB";
	$result=mysql_query($sql);
	while($row=mysql_fetch_array($result))
	{
		$ZY=$row['专业'];
		echo "<option value='$ZY'>$ZY</option>";
	}
	?>
</select>
</form>
<!-- 设置id为"txthint"的div标记,用于显示返回信息 -->
<div id="txthint"></div>
</body>
</html>

               ex9_3_process.php文件

<?php
$ZY=$_GET['ZY'];
header('Content-Type:text/html;charset=gb2312');		//发送header,将编码设为gb2312
$conn=mysql_connect("localhost","root","123456");		//连接MySQL服务器
mysql_select_db("PXSCJ",$conn);					//选择PXSCJ数据库
mysql_query("SET NAMES gb2312");				//将字符集设为gb2312
$sql="select 学号 from XSB where 专业='$ZY'";
$result=mysql_query($sql);
while($row=mysql_fetch_array($result))
{
	echo $row['学号']."<br>";					//输出该专业的所有学号
}
?>
posted on 2011-07-28 09:13  平渡飞扬  阅读(633)  评论(1编辑  收藏  举报