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.格式有很多,无缓存问题
浙公网安备 33010602011771号