Ajax使用1
Ajax:
* Ajax概述:
* Ajax的原理
* 什么是Ajax
* 异步和同步
* 同步:
* 客户端页面向服务器端发送请求,直到服务器端将响应发送回来,这个过程中,页面是不能做任何事情。
* 异步:
* 客户端页面向服务器端发送请求,直到服务器端将响应发送回来,这个过程中,页面可以去做任何事情。
* Ajax的定义:
(不严格)客户端与服务器端进行交互,而无需刷新当前页面的技术.
* 作用:
* 可以实现同步交互所不能完成的功能,提高同步实现的效果。
* 页面减少了,只用一个页面即可。
* 缺点:
* 小则怡情,大则伤身(Ajax的异步实现不能过多使用)
* Ajax的原理:
* Ajax的对象:
* Ajax的核心对象:XMLHttpRequest(XHR)对象
* IE使用的是XMLHTTP对象
* 浏览器兼容性:
* 判断当前用户的浏览器是IE还是其他浏览器
* 创建Ajax对象:
function getXHR(){
var xhr;
if(window.ActiveXObject){
xhr=new ActiveXObject("Microsoft.XMLHTTP");
}else{
xhr=new XMLHttpRequest();
}
return xhr;
}
* Ajax对象的属性和方法
* 方法
* open( method, url, async )方法:向服务器端创建一个请求
* method参数:指定当前请求的方式,GET和POST。
* url参数:指定当前请求的服务器端地址
* async参数:指定当前请求是否为异步,Boolean值。
* true:表示异步
* false:表示同步,目前W3C的最新规范不建议使用同步。
* send()方法:发送请求的参数。
* 参数:请求参数
* 0 - 尚未初始化
* 1 - 正在发送请求
* 2 - 请求完成
* 3 - 正在响应
* 4 - 响应完毕
* status:服务器端返回的状态码
* 404 - 找不到网页
* 200 - OK
* 302 - 请求转发
* 304 - 请求缓存
* 500 - 内部服务器错误
* responseText:表示的是服务器端返回的文本内容。
* responseXML:表示的是服务器端返回的XML格式内容。
* 事件
* onreadystatechange:用于监听服务器端的状态变化
* 当readyState属性的值变化时,会触发onreadystatechange事件
* Ajax的作用:
* GET请求:
* 创建Ajax的核心对象:略
* 创建请求:
open( method , url ):
* 如果GET方式的话,请求参数需要添加在URL后面
* 发送请求
send()方法:
* 如果GET方式的话,send( null )
* 接收响应
onreadystatechange事件
readyState和status属性:
* readyState属性:Ajax从请求到响应的整个过程
* status属性:告诉我们Ajax请求是否成功
* responseText属性:接收服务器端的响应
* POST请求:(与GET方式的区别)
* open()方法中的method参数为POST
* 如果请求方式为POST的话,send()方法可以发送请求参数
* 设置请求头信息:
xhr.setRequestHeader("Content-Type","application/x-www-form-urlencoded");
* Ajax的应用:
*简单实例:
*index.html代码:
<!DOCTYPE html>
<html>
<head>
<meta charset="utf-8">
<meta http-equiv="X-UA-Compatible" content="IE=edge">
<title></title>
</head>
<body>
<h1>Ajax的GET方式请求测试</h1>
<p>
你看到的这些内容都是当前HTML页面的!
</p>
<hr>
<button id="ajaxsend">ajax请求</button>
<div id="mydiv"></div>
</body>
<script>
var ajaxsend = document.getElementById("ajaxsend");
ajaxsend.onclick=function(){
function getXHR(){
var xhr;
if(window.ActiveXObject){
xhr=new ActiveXObject("Microsoft.XMLHttp");
}else{
xhr=new XMLHttpRequest();
}
return xhr;
}
// 1 创建Ajax的核心对象
var XmlHttpRequest = getXHR();
// 2 创建请求,使用open( method,url,async )方法
// 注意:当请求方式为GET时,请求参数添加在open()方法url参数的后面。
XmlHttpRequest.open("GET", "server.php", true);
// 3 发送请求,使用send( 请求参数 )方法
// 注意:
// 如果Ajax请求方式是GET方式的话,send()方法是不能发送任何请求数据的。
// 该方法(步骤)是不能被省略的,send(null)
XmlHttpRequest.send(null);
// 4 接收响应,使用onreadystatechange事件(readyState,status,responseText属性)
XmlHttpRequest.onreadystatechange = function(){// function就是onreadystatechange事件的处理函数
// 接收服务器端的响应数据内容,在该处理函数中完成
// a 保证readyState的值为4
if(XmlHttpRequest.readyState==4){
// b 保证status的值为200
if(XmlHttpRequest.status==200){
// 保证服务器端可以正确地响应数据内容
var data = XmlHttpRequest.responseText; // responseText属性只能文本格式的响应数据。
var mydiv = document.getElementById("mydiv");
mydiv.innerHTML = data;
}
}
}
}
</script>
</html>
*server.php
<?php
echo "Hello Ajax php";
?>
*城市联动:
index.html:
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
<html xmlns="http://www.w3.org/1999/xhtml">
<head>
<title>案例</title>
<meta http-equiv="Content-Type" content="text/html;charset=UTF-8"/>
<script src="myutils.js"></script>
</head>
<body>
<select id="province">
<option>-请选择-</option>
</select>
<select id="city">
<option>-请选择-</option>
</select>
</body>
<script>
var provinceSel = document.getElementById("province");
var xhr = getXHR();
xhr.open("get","province.php",true);
xhr.send(null);
xhr.onreadystatechange = function(){
if(xhr.readyState==4&&xhr.status==200){
var provinces = xhr.responseText;
var provinceArr = provinces.split(",");
for(var i=0;i<provinceArr.length;i++){
var province = provinceArr[i];
var option = document.createElement("option");
var textEle = document.createTextNode(province);
option.appendChild(textEle);
provinceSel.appendChild(option);
}
}
}
provinceSel.onchange = function(){
// 清除第二个城市的option
var citySel = document.getElementById("city");
var cityoptions = citySel.getElementsByTagName("option");
// js中的数组长度问题:是可变的
for(var z=cityoptions.length-1;z>0;z--){
var cityoption = cityoptions[z];
citySel.removeChild(cityoption);
}
// 表示选择了不同的省份
var provinceValue;
//1 获取用户当前选择的省份名称
var myoptions = provinceSel.getElementsByTagName("option");
for(var i=0;i<myoptions.length;i++){
var option = myoptions[i];
if(option.selected){
provinceValue = option.value;
break;
}
}
//2 触发Ajax异步请求
xhr.open("POST","cities.php",true);
xhr.setRequestHeader("Content-Type","application/x-www-form-urlencoded");
xhr.send("province="+provinceValue);
xhr.onreadystatechange = function(){
if(xhr.readyState==4&&xhr.status==200){
var cities = xhr.responseText;
var citiesArr = cities.split(",");
for(var i=0;i<citiesArr.length;i++){
var city = citiesArr[i];
var option = document.createElement("option");
var textEle = document.createTextNode(city);
option.appendChild(textEle);
citySel.appendChild(option);
}
}
}
}
</script>
</html>
province.php:
<?php
echo "辽宁省,吉林省,山东省,河南省,福建省";
?>
cities.php:
<?php
$province = $_REQUEST["province"];
file_put_contents("d:/mylog.log",$province."\r\n",FILE_APPEND);
$cities = "";
if($province=="吉林省"){
$cities = "长春市,吉林市,松原市,延边市,四平市";
}else if($province=="辽宁省"){
$cities = "沈阳市,大连市,铁岭市,盘锦市,葫芦岛市";
}else if($province=="山东省"){
$cities = "青岛市,济南市,威海市,日照市,德州市";
}
echo $cities;
?>