ajax是指一种创建交互式网页应用的网页开发技术。
AJAX产生的背景:
以前做数据交互的时候,大家通常选择使用表单的方式提交数据,表单提交这种方式,默认的时候会由当前页面跳转到action页面,所以用户体验及其糟糕,所以需要想办法让当前页面,不跳转的同时把数据传递过去,把服务器(后端)响应的内容拿回来。
特点: 在不提交整个页面的情况下, 实现页面的局部刷新; (让当前页面,不跳转的同时把数据传递过去,把服务器(后端)响应的内容拿回来。)
ajax 也需要在服务器环境下 (live server 本地假服务 可以做前端页面展示 但是没有后端和数据库)
1. 创建ajax请求(构造函数创建)
var xhr = new XMLHttpRequest();
console.log(xhr.readyState); // 0 请求未初始化只是创建了请求 还未进行任何操作
2. 配置请求相关的信息 (请求方式 请求地址 是否异步)
xhr.open(type,url,bool)
type 请求方式 (get post)
url 请求地址 (1.txt)
bool 是否异步(默认 true:异步)
xhr.open("get", "../data/1.txt", true);
3. 发送请求
xhr.send();
console.log(xhr.readyState); // 1 异步原因导致
4.等待后端(服务端) 响应绑定事件,监听xhr.readyState的改变 => 当xhr.readyState改变时触发此事件
xhr.onreadystatechange = function () {
console.log("请求的状态改变:", xhr.readyState); // 2 3 4 //
xhr.readyState == 4 请求已经有响应结果
// xhr.status==200 响应结果也是成功的
if (xhr.readyState == 4 && xhr.status == 200) {
// ajax请求后端 后端返回响应的数据(text json html)
console.log(xhr.responseText); }
}
xhr.readyState 请求的状态
0 请求未初始化 (只是创建了请求 还未进行任何操作)
1 已经建立请求,配置了请求相关的信息,但是请求还未发送
2 请求已发送, 但是正在处理中(通常现在可以从响应中获取内容头)
3 后端正在处理中 通常响应中已有部分数据可用了,但是服务器还没有完成响应的生成
4 响应已完成, 返回响应的结果 (请求还要继续,请求成功,跑路了(),请求失败,服务器出错)
xhr.status 后端返回的响应状态码(响应的结果)
1** 信息,服务器收到请求,需要请求者继续执行操作
2** 成功,操作被成功接收并处理
3** 重定向,需要进一步的操作以完成请求
4** 客户端错误,请求包含语法错误或无法完成请求
5** 服务器错误,服务器在处理请求的过程中发生了错误
200:ok,页面正确打开,并得到完整的响应内容。
301:被请求的资源已永久移动到新位置
302:请求的资源临时从不同的 URI响应请求
304:缓存
404:页面不存在。
500:常指后端代码发生错误
503:由于临时的服务器维护或者过载,服务器当前无法处理请求。
get
以get方式传递的数据 会拼接在url之后以?分隔
GET 关联数据 广泛接收前端以GET方式传递过来的数据 (form传递/ajax传递),我们可以使用超级全局变量
GET 来对应字段(键名)接收数据
请求的流程=>前端发送请求 (携带数据) => 后端 后端接收请求,对应字段名(键名)接收数据,处理 => 返还数据给前端
$obj = array();
if($user&&$pwd){
$obj["status"] = true;
$obj["detail"] = "用户名:$user,密码:$pwd;";
}else{
$obj["status"] = false;
$obj["detail"] = "请传入完整参数";
}
echo json_encode($obj);
post
数据类型 FormData => xhr.setRequestHeader("Content-Type", "application/x-www-form-urlencoded");
POST 广泛接收以POST方式传递过来的数据 (form传递/ajax传递),我们可以使用超级全局变量 $_POST 来对应字段(键名)的数据
$user = $_POST["user"]; // 对应字段名 user 接收用户名
$pwd = $_POST["pwd"]; // 对应字段名 pwd 接收密码