Ajax

120 阅读2分钟

客户端与服务器

客户端:获取和消费资源

服务器: 存放和对外提供资源

客户端请求服务器,服务器处理这次请求,服务器响应客户端

URL地址

http: 通信协议

//www.baidu.com 服务器名称

/xxx/p/index.html 资源在服务器上具体的存放位置

请求方式

get: 获取服务器资源(要资源)

post: 向服务器提交数据(送资源)

Ajax

实现 网页服务器之间的 数据交互

接口

请求地址+请求方式

Ajax原理

  // 1. 创建 XHR 对象
  var xhr = new XMLHttpRequest()
 // 2. 调用 open 函数
  xhr.open('GET','http://www.liulongbin.top:3006/api/getbooks')
// 3. 调用 send 函数
xhr.send()
// 4. 监听 onreadystatechange 事件
xhr.onreadystatechange = function () {
 if (xhr.readyState === 4 && xhr.status === 200) {
   // 获取服务器响应的数据
 console.log(xhr.responseText)
}
}

查询字符串

?id=1&&name=zs

JSON

JSON 是一种轻量级的文本数据交换格式

要实现从 JSON 字符串转换为 JS 对象,使用 JSON.parse() 方法:

要实现从 JS 对象转换为 JSON 字符串,使用 JSON.stringify() 方法:

同源

协议,域名和端口都相同

实现跨域

JSONP,CORS,服务器反向代理

防抖

输入框防抖

防抖策略debounce)是当事件被触发后,延迟 n 秒后再执行回调,如果在这 n 秒内事件又被触发,则重新计时。

var timer = null // 1. 防抖动的 timer
function debounceSearch(keywords) { // 2. 定义防抖的    函数
 timer = setTimeout(function() {
 // 发起请求
 getSuggestList(keywords)
 }, 500)
}

$('#ipt').on('keyup', function() { // 3. 在触发 keyup 事件时,立即清空 timer
 clearTimeout(timer)
// ...省略其他代码
 debounceSearch(keywords)
})

**防抖**:如果事件被频繁触发,防抖能保证只有最有一次触发生效!前面 N 多次的触发都会被忽略!

节流

节流策略throttle),顾名思义,可以减少一段时间内事件的触发频率。

节流阀

      var timer = null // 1.预定义一个 timer 节流阀
       if (timer) { return }         
         timer = setTimeout(function() {
         //发起请求
         .....
         timer=null
         },16)
         
**节流**:如果事件被频繁触发,节流能够减少事件触发的频率,因此,节流是有选择性地执行一部分事件!