目录
Ajax
1. 原生 JS 实现 Ajax
2. 使用 Ajax 实现异步通信
a. Ajax 的基础语法
b. 用 Ajax 传递数据
i. 传递字符串数据
ii. 传递 JSON 数据
3. 异步通信案例:搜索候选栏
a. 主要功能
b. 代码实现
c. 示例文档与效果图
Ajax
Ajax(Asynchronous Javascript And XML,异步 JavaScript 和 XML):一种创建交互式、快速动态网页应用的网页开发技术,无需重新加载整个网页的情况下,能够更新部分网页的技术。通过在后台与服务器进行少量数据交换,Ajax 可以使网页实现异步更新。这意味着可以在不重新加载整个网页的情况下,对网页的某部分进行更新。Ajax 可以请求并获取服务器的数据,来完成与服务的通信。例如,当向搜索引擎的输入框中输入字符时,Ajax 把输入的字符发送给了服务器,服务器返回搜索候选项;当输入用户名时,页面通过 Ajax 把用户名发送给服务器,服务器返回用户是否重复的检验结果。1. 原生 JS 实现 Ajax使用原生 JS 实现 Ajax 的异步通信功能:
GIF
let http = new XMLHttpRequest();//一个可以向服务器发送数据并接收服务器返回数据的对象
let result = null;//服务器返回的数据
http.onreadystatechange = function(){//请求就绪状态改变时
// console.log(http.readyState);//请求就绪状态
if(http.readyState == 4 && http.status == 200){//请求成为完成
let res = http.responseText;//服务器返回的文本数据
result = res;//服务器返回的数据
console.log("res="+res);
}
};
//点击图片时,请求服务器获取数据,把接收的数据显示在页面
function doAjax(){
//发送ajax请求
http.open("get","../data/info.txt",true);//创建打开一个异步请求
// http.open("get","../data/info.txt",false);//创建打开一个同步请求
http.send();//开始发送数据
//其它业务代码
console.log("其它业务代码 result="+result);//发送ajax之后的其它js业务代码
//同步 发送ajax请求之后其它js业务代码必须等待ajax请求成功以后才能执行
//异步 发送ajax请求之后的其它js业务代码的执行,与ajax请求的执行,没有任何关系.
//总结: ajax异步请求时服务器返回的数据只能在ajax请求完成的回调函数中使用.
}
2. 使用 Ajax 实现异步通信JS 是一门前端语言。Ajax 是一门技术,它提供了异步更新的机制,使用客户端与服务器间交换数据而非整个页面文档,实现页面的局部更新。jQuery 是一个框架,它对 JS 进行了封装,使其更方便使用。jQuery 使得 JS 与 Ajax 的使用更方便。这里使用的是 jQuery 的 Ajax 插件。a. Ajax 的基础语法
b. 用 Ajax 传递数据
student.txt:
{
"id":1,
"name":"刘一",
"age":18,
"addr":"广州市",
"desc":"跑步"
}
JSON 的格式规定,文档里的 JSON 因为是字符串格式所以属性和内容都要加双引号。如果返回的是 JSON 数组,那就是 [{},{},..]
i. 传递字符串数据
GIF
//1.点击图片请求服务器(用本地文件模拟服务器),并把接受到的数据显示在页面
function doAjax(){
let result = null;//服务器返回的数据
//发送ajax请求
$.ajax({
type:"get", //本地文件只能使用get方式
url:"../data/student.txt",//服务器地址
//dataType:"json",//预期服务器返回json,走一次JSON.parse()
success:function(response){//成功回调
console.log(response);
let resObj = JSON.parse(response);//把服务器返回的字符串转为对象
console.log("resObj.desc="+resObj.desc);//描述信息
result =resObj.desc;//把服务器返回的字符串
$("#describe").text(resObj.desc);//把服务器返回的数据显示在页面
},
error:function(error){//失败回调
console.log(error);
}
});
//其它业务代码
console.log("其它业务代码 result="+result);//发送ajax之后的其它js业务代码
//同步:发送ajax请求之后其它js业务代码必须等待ajax请求成功以后才能执行
//异步:发送ajax请求之后的其它js业务代码的执行,与ajax请求的执行,没有任何关系
//总结:ajax异步请求时服务器返回的数据只能在ajax请求完成的回调函数中使用
}
ii. 传递 JSON 数据
GIF
//1.点击图片请求服务器(用本地文件模拟服务器),并把接受到的数据显示在页面
function doAjax(){
let result = null;//服务器返回的数据
//发送ajax请求
$.ajax({
type:"get", //本地文件只能使用get方式
url:"../data/student.txt",//服务器地址
dataType:"json",//加了dataType, 回调传递的就是直接可以操作的json对象
success:function(response){//成功回调
console.log(response);
console.log("resObj.desc="+response.desc);//描述信息
result =response.desc;//把服务器返回的字符串
$("#describe").text(result);//把服务器返回的数据显示在页面
},
error:function(error){//失败回调
console.log(error);
}
});
//其它业务代码
console.log("其它业务代码 result="+result);//发送ajax之后的其它js业务代码
//同步:发送ajax请求之后其它js业务代码必须等待ajax请求成功以后才能执行
//异步:发送ajax请求之后的其它js业务代码的执行,与ajax请求的执行,没有任何关系
//总结:ajax异步请求时服务器返回的数据只能在ajax请求完成的回调函数中使用
}
3. 异步通信案例:搜索候选栏
a. 主要功能
使用本地文件模拟服务器;
实现百度的搜索候选功能。
b. 代码实现
.content {
width: 643px;
margin: 200px auto;
text-align: center;
}
input[type='text'] {
width: 534px;
height: 40px;
font-size: 14px;
}
input[type='button'] {
width: 100px;
height: 46px;
background: #38f;
border: 0;
color: #fff;
font-size: 15px
}
.show {
position: absolute;
width: 516px;
border: 1px solid #efefef;
border-top: 0;
display: none;
text-align: left;
color: darkgray;
line-height: 20px;
padding: 5px 10px;
}
//当键盘按键弹起时调用
function searchWord(obj) {
console.log(obj.value);//当前输入内容
if(obj.value.length == 0)
return;//没有输入内容时不显示搜索候选
$("#show").empty();//每次添加搜索候选项之前,先把以前的候选项清除
let reg = new RegExp("^"+obj.value);//匹配以当前输入内容开头的字符
//把用户输入的字符发送给服务器
$.ajax({
type:"get",//请求方式
url:"../data/data.txt",//模拟服务器地址
data:{"msg":obj.value},//发送给服务器的数据
success:function(response){
console.log("response=" + response);
console.log(typeof response);//string
let arr = JSON.parse(response);//把string字符串转为object对象(数组)
for(let s of arr){//迭代候选项
if(reg.test(s)){//是否是以输入字符开头
$("#show").append("
}
}
// $("#show").css("display","block");//显示div
$("#show").show();//同上
// $("#show").hide();//隐藏
},
error:function(error){
console.log(error);//失败信息
}
});
}
c. 示例文档与效果图
data.txt:
[
"id:qwert",
"name:Regino",
"name:Reggie",
"age:23",
"addr:Guangdong",
"blog:https://blog.csdn.net/Regino"
]
因为接受的是数组形式,所以这里是 JSON 的数组类型。
保时捷弹射起步教程
为什么监控画面晚上是黑白的?怎么能变成彩色的?