Ajax全名 : Asynchronous Javascript and XML (异步的javascript和XML)
作用:实现数据交互,可以在无页面刷新的情况下,获取资源
应用:局部刷新、表单的实时验证
代码实现:
1.在html同目录下,保存一个1.txt文件
2.
<!DOCTYPE html> <html lang="en"> <head> <meta charset="UTF-8"> <title>Ajax</title> </head> <body> <input type="button" id="btn" value="按钮"/> </body> <script> oBtn = document.getElementById("btn"); oBtn.onclick = function () { var xhr = new XMLHttpRequest(); //1 xhr.open('get', '1.txt', true); //2 xhr.send(); //3 xhr.onreadystatechange = function () { if (xhr.readyState === 4) { //4 if (xhr.status === 200) { //5 alert(xhr.responseText); //6 } else { alert('出错了,error:' + xhr.status); } } } } </script> </html>
代码各个部分解析:
1.创建一个ajax对象XMLHttpRequest,后面调用对象方法
2.open方法: 参数 (1).打开方式 get、post (2).地址 (3).是否异步异步:阻塞模式,前面的代码不会阻碍后面代码的执行同步:阻塞模式,前面代码会影响后面代码执行
3.发送请求
4.onreadystatechange:当状态值改变的时候触发
readyState:ajax工作状态:
0 还没有调用open()方法
1 以调用方法send(),正在发送请求
2 send()方法完成,已收到全部响应内容
3 正在解析响应内容
4 响应内容解析完成,可以在客户端调用了
5.http状态值,当值为200时,表示请求成功。(http协议)
6.responseText:返回的内容被存放的这个属性下 字符串形式
responseXML:返回的内容被存放的这个属性下 XML形式
open的打开方式:
get:
<!DOCTYPE html> <html lang="en"> <head> <meta charset="UTF-8"> <title>Title</title> </head> <body> <form action="1_get.php"> <input type="text" name="username"/> <input type="text" name="age"/> <input type="submit" value="submit"/> </form> </body> </html>
<?php header('content-type:text/html;charset="utf-8"'); error_reporting(0); $username = $_GET['username']; $age = $_GET['age']; echo "你的名字:{$username},年龄:{$age}";
1.把数据名称和数据对应的数据值用等号链接,若果有多项数据,后把数据组合,用 & 链接,然后把数据放到url?后面传到指定页面
数据通过url传递,在php页面更改username和age的数值,刷新,页面也会发生相应改变。
2.因为url长度限制原因,不要通过get方式传递过多的数据。
3.可以被历史纪录,记录下来
4.格式:字符串
5.容易出现的问题:页面的缓存问题,在第二次点击按钮式,不会请求,而会从缓存读取。
可以在url后面加一个时间戳
xhr.open('get', '1_get.php?username=&age=30&'+new Date().getTime(), true);
post:
js
<!DOCTYPE html> <html lang="en"> <head> <meta charset="UTF-8"> <title>Title</title> </head> <body> <input type="button" id="btn" value="按钮"/> </body> <script> oBtn = document.getElementById("btn"); oBtn.onclick = function () { var xhr = new XMLHttpRequest(); xhr.open('post', '1_post.php', true); //post方式数据放在send()方法,作为参数传递 xhr.setRequestHeader('content-type','application/x-www-form-urlencoded'); //声明数据发送的编码类型 xhr.send('username=leo&age=30'); xhr.onreadystatechange = function () { if (xhr.readyState === 4) { if (xhr.status === 200) { alert(xhr.responseText); } else { alert('出错了,error:' + xhr.status); } } } } </script> </html>
php
<?php header('content-type:text/html;charset="utf-8"'); error_reporting(0); //$_REQUEST $username = $_POST['username']; $age = $_POST['age']; echo "你的名字:{$username},年龄:{$age}";
1.发送的数据形式一样,但是传输方式不一样
2.理论上无限制
3.通过请求头发送,理论不会被缓存
4.格式有很多,无缓存问题