Asynchronous Javascript And XML”(异步 JavaScript 和 XML)。
通过在后台与服务器进行少量数据交换,Ajax 可以使网页实现异步更新。这意味着可以在不重新加载整个网页的情况下,对网页的某部分进行更新。
概念
XMLHttpRequest 对象
是 AJAX 的基础,用于在后台与服务器交换数据。这意味着可以在不重新加载整个网页的情况下,对网页的某部分进行更新。
语法:variable=new XMLHttpRequest();
向服务器发送请求
如需将请求发送到服务器,我们使用 XMLHttpRequest 对象的 open() 和 send() 方法:
open(method,url,async)
规定请求的类型、URL 以及是否异步处理请求。
- method:请求的类型;GET 或 POST
- url:文件在服务器上的位置
- async:true(异步)或 false(同步)
get和post
```html get 1.用来请求数据 2.请求放在url地址里面的,对用户是可见的 3.发送的信息也是有限制的
post 1.提交数据 2.发送数据对用户来说是不可见 3.发送数据理论上是没有限制的
<a name="WLic2"></a>
## send(_string_)
将请求发送到服务器。
- _string_:仅用于 POST 请求
<a name="Bis5i"></a>
# 服务器响应
如需获得来自服务器的响应,请使用 XMLHttpRequest 对象的 responseText 或 responseXML 属性。<br />responseText 获得字符串形式的响应数据。<br />responseXML 获得 XML 形式的响应数据。
<a name="1zrfA"></a>
# onreadystatechange 事件
当请求被发送到服务器时,我们需要执行一些基于响应的任务。<br />每当 readyState 改变时,就会触发 onreadystatechange 事件。<br />readyState 属性存有 XMLHttpRequest 的状态信息。<br />下面是 XMLHttpRequest 对象的三个重要的属性:
<a name="onreadystatechange"></a>
## onreadystatechange
存储函数(或函数名),每当 readyState 属性改变时,就会调用该函数。
<a name="Up58B"></a>
## readyState
存有 XMLHttpRequest 的状态。从 0 到 4 发生变化。<br />0: 请求未初始化<br />1: 服务器连接已建立<br />2: 请求已接收<br />3: 请求处理中<br />4: 请求已完成,且响应已就绪
<a name="lyTV6"></a>
## status
200: "OK"<br />404: 未找到页面
当 readyState 等于 4 且状态为 200 时,表示响应已就绪:<br />if (xmlhttp.readyState==4 && xmlhttp.status==200)
<a name="5jO3c"></a>
# 使用 Callback 函数
callback 函数是一种以参数形式传递给另一个函数的函数。<br />如果您的网站上存在多个 AJAX 任务,那么您应该为创建 XMLHttpRequest 对象编写一个标准的函数,并为每个 AJAX 任务调用该函数。
<a name="Z8ib5"></a>
# 没封装的ajax
```html
<p id="app"></p>
<script>
/*
1.什么是异步 何时使用
2.如何使用原生ajax
*/
var app = document.getElementById("app")
var url ="http://192.168.4.18:3000/search?keywords=哈"
/* ajax 如何使用ajax向后台获取数据*/
/* 1. 创建ajax核心对象*/
var xhr = new XMLHttpRequest();
/* 2.与服务器建立连接 xhr.open(method,url,async)
请求的方式,地址,是否异步
*/
xhr.open("get",url,true)
/* 3.发送请求 */
xhr.send()
/* 4.响应 */
/* onreadystatechange 监听服务器的响应状态*/
xhr.onreadystatechange = function(){
/* xhr.status 服务器端响应的状态码 200 */
/* xhr.readyState 服务器响应的进度 4 响应已经完成 */
if(xhr.readyState == 4 && xhr.status == 200){
var txt = xhr.responseText;
/* JSON.parse() 可以json格式的字符串,转换为json格式的数据 */
var obj = JSON.parse(txt);
console.log(obj)
app.innerHTML = obj.name
}
}
</script>
传参解构
/* 解构 */
function http({
callback:callback,
method,
url,
}) {
console.log(callback);
console.log(method)
console.log(url)
}
http({
callback:"123",
method:"get",
url:"xx"
})
封装ajax
http.js
function ajax({
url,
method,
success
}){
var xhr = new XMLHttpRequest()
xhr.open(method,url,true)
xhr.send()
xhr.onreadystatechange = function(){
if(xhr.readyState == 4 && xhr.status == 200){
var res = JSON.parse(xhr.responseText);
success(res);
}
}
}
封装ajax..html
var url = "http://192.168.4.18:3000/comment/music?id=186016&limit=1"
ajax({
url,
method:"get",
success:res=>{
console.log(res)
}
})