原理说明:
Ajax的原理简单来说是通过XMLHttpRequest对象向服务器发出异步请求,然后从服务器得到相应,结果以文本、XML、json等方式传递回来,然后通过javascript来操作DOM更新页面的局部。
原理图:
下面我再将过程中涉及到的代码做如下演示:
1.涉及到的php页面,register.php命令发出的部分,registerProcess接收数据的部分。首先先用get方式
register.php:
<html>
<head>
<meta http-equiv="content-type" content="text/html;charset=utf-8" />
<title>用户注册</title>
<script type="text/javascript">
//创建XMLHttpRequest对象
function getXmlHttpObject(){
var xmlHttpRequest;
if (window.XMLHttpRequest)
{// code for IE7+, Firefox, Chrome, Opera, Safari
xmlHttpRequest=new XMLHttpRequest();
}
else
{// code for IE6, IE5
xmlHttpRequest=new ActiveXObject("Microsoft.XMLHTTP");
}
return xmlHttpRequest;
}
var myXmlHttpRequest ="";
function checkUser(){
myXmlHttpRequest = getXmlHttpObject();
if(myXmlHttpRequest){//对象存在的话
//通过myXmlHttpRequest对象发送请求到服务器的某个页面
//参数1:请求的方式get/post
//参数2:指定url,请求接受的页面,本质还是http协议
//参数3:true使用异步机制
var url="registerProcess_get.php?username="+$("username").value;
//打开一个请求
myXmlHttpRequest.open("get",url,true);
//指定回调函数
myXmlHttpRequest.onreadystatechange = dispose;
//正式发送请求,如果是get请求则填入null即可
//如果是post请求,则填入实际的数据
myXmlHttpRequest.send(null);
}
}
//回调函数dispose
function dispose(){
//window.alert("被调用"+myXmlHttpRequest.readyState);
//取出从registerProcess.php中返回的数据
if(myXmlHttpRequest.readyState==4){
//取出值,根据返回信息的格式而定
//window.alert(myXmlHttpRequest.responseText);
$("myres").value = myXmlHttpRequest.responseText;//将返回的值在myres中显示出来
}
}
function $(id){
return document.getElementById(id);
}
</script>
</head>
<body>
<form action="???" method="post">
用户名字:<input type="text" name="username" οnkeyup="checkUser();" id="username"><input type="button" οnclick="checkUser();" value="验证用户名">
<input style="border-width: 0;color: red" type="text" id="myres">
<br/>
用户密码:<input type="password" name="password"><br>
电子邮件:<input type="text" name="email"><br/>
<input type="submit" value="用户注册">
</form>
<form action="???" method="post">
用户名字:<input type="text" name="username2" >
<br/>
用户密码:<input type="password" name="password"><br>
电子邮件:<input type="text" name="email"><br/>
<input type="submit" value="用户注册">
</form>
</body>
</html>
registerProcess.php
<?php
//限制浏览器返回的数据是xml格式
header("Content-Type:text/xml;charset=utf-8");
//限制浏览器不要缓存数据
header("Cache-Control:no-cache");
//接收数据
$username = $_GET['username'];
if($username == "GL"){
echo "用户名正确";
}else{
echo "用户名错误";
}
?>
1.涉及到的php页面,register.php命令发出的部分,registerProcess接收数据的部分。post方式
register.php
<html>
<head>
<meta http-equiv="content-type" content="text/html;charset=utf-8" />
<title>用户注册</title>
<script type="text/javascript">
//创建XMLHttpRequest对象
function getXmlHttpObject(){
var xmlHttpRequest;
if (window.XMLHttpRequest)
{// code for IE7+, Firefox, Chrome, Opera, Safari
xmlHttpRequest=new XMLHttpRequest();
}
else
{// code for IE6, IE5
xmlHttpRequest=new ActiveXObject("Microsoft.XMLHTTP");
}
return xmlHttpRequest;
}
var myXmlHttpRequest ="";
function checkUser(){
myXmlHttpRequest = getXmlHttpObject();
if(myXmlHttpRequest){//对象存在的话
//通过myXmlHttpRequest对象发送请求到服务器的某个页面
//参数1:请求的方式get/post
//参数2:指定url,请求接受的页面,本质还是http协议
//参数3:true使用异步机制
var url="registerProcess_post.php";
//要发送的数据
var data = "username="+$("username").value;
//打开一个请求
myXmlHttpRequest.open("post",url,true);
myXmlHttpRequest.setRequestHeader("Content-Type","application/x-www-form-urlencoded");//post相对get额外添加的部分
//指定回调函数
myXmlHttpRequest.onreadystatechange = dispose;
//正式发送请求,如果是get请求则填入null即可
//如果是post请求,则填入实际的数据
myXmlHttpRequest.send(data);
}
}
//回调函数dispose
function dispose(){
//window.alert("被调用"+myXmlHttpRequest.readyState);
//取出从registerProcess.php中返回的数据
if(myXmlHttpRequest.readyState==4){
//取出值,根据返回信息的格式而定
//window.alert(myXmlHttpRequest.responseText);
$("myres").value = myXmlHttpRequest.responseText;//将返回的值在myres中显示出来
}
}
function $(id){
return document.getElementById(id);
}
</script>
</head>
<body>
<form action="???" method="post">
用户名字:<input type="text" name="username" id="username"><input type="button" οnclick="checkUser();" value="验证用户名">
<input style="border-width: 0;color: red" type="text" id="myres">
<br/>
用户密码:<input type="password" name="password"><br>
电子邮件:<input type="text" name="email"><br/>
<input type="submit" value="用户注册">
</form>
<form action="???" method="post">
用户名字:<input type="text" name="username2" >
<br/>
用户密码:<input type="password" name="password"><br>
电子邮件:<input type="text" name="email"><br/>
<input type="submit" value="用户注册">
</form>
</body>
</html>
registerProcess.php
<?php
//限制浏览器返回的数据是xml格式
header("Content-Type:text/xml;charset=utf-8");
//限制浏览器不要缓存数据
header("Cache-Control:no-cache");
//接收数据
$username = $_POST['username'];
if($username == "GL"){
echo "用户名正确";
}else{
echo "用户名错误";
}
?>