进阶12:AJAX & server-mock

ajax 是什么?有什么作用?

ajax是Async Javascript And Xml的缩写,即异步的JavaScript和XML。
ajax的作用是通过JavaScript模仿浏览器发出的请求,实现局部刷新和加载,当像服务器请求数据时,无需刷新整个页面,提高用户体验。
ajax现在最常用的数据传输格式是json

前后端开发联调需要注意哪些事情?后端接口完成前如何 mock 数据?

前后端开发联调需要注意:

  1. 约定数据格式,常用json格式传输数据
  2. 约定接口:确定接口名称及请求和响应的格式,请求的参数名称、响应的数据格式;
    后端接口完成前如何mock数据:
    mock数据指的是在后端开发没有完成时,前端可以通过mock方法搭建本地服务器,模拟后台数据来实现数据交互的效果。可以安装server-mock,也可以使用easy-mock,这样不需要特地去写一个后台的处理页面文件来访问数据。

点击按钮,使用 ajax 获取数据,如何在数据到来之前防止重复点击?

<!DOCTYPE html>
<html lang="en">
<head>
  <meta charset="UTF-8">
  <title>Document</title>
  <style type="text/css">
  ul,li {
    margin: 0;
    padding: 0;
  }
  .list>li {
    border: 1px solid pink;
    list-style: none;
    margin: 0 auto;
    width: 90%;
    padding:10px;
  }
  .btn {
    display: block;
    width: 100px;
    height: 40px;
    border: 2px solid rgba(0, 212, 46, 0.54);
    border-radius: 3px;
    margin: 0 auto;
    text-align: center;
    line-height: 40px;
    color: #000;
    text-decoration: none;
  }
  .btn:hover {
    background: rgba(0, 212, 46, 0.54);
  }
</style> 
</head>
<body>
  <ul class="list">
  </ul>
  <a class="btn" href="#">加载更多</a>


  <script type="text/javascript">
   var btn = document.querySelector('.btn')
   var list = document.querySelector('.list')
   var pageIndex=0
   var isDataOk = true    //加一个状态锁,默认为true
   // 给btn加载点击事件,点击时发送请求
   btn.addEventListener('click',function(e){   
    e.preventDefault()

    //先判断数据有没有到来 ,如果没有,将不再向后端发送请求
    if(!isDataOk){
      return
    }

    var xhr = new XMLHttpRequest()
    xhr.onreadystatechange = function(){
      if(xhr.readyState === 4){
        if(xhr.status === 200 || xhr.status === 304){
          // 把响应的数据转换为json格式的字符串
          var results = JSON.parse(xhr.responseText)
          // console.log(results)  这里可以先判断一下数据有没有到来
          var fragment = document.createDocumentFragment()
          for(var i=0;i<results.length;i++){
            var node = document.createElement('li')
            node.innerText = results[i]
            fragment.appendChild(node)
          }
          list.appendChild(fragment)
          pageIndex += 5
        }else{
          console.log('出错了')
        }
        isDataOk = true //表示是响应数据状态
      }
    }
    xhr.open('get','/loadMore?index='+pageIndex+'&length=5',true)
    xhr.send()
    isDataOk = false  //请求发送后,设置为false。当用户再次点击时,会做一个判断,如果数据没有没有到来,将不会再向后端发送请求。
  })
</script> 
</body>
</html>

实现加载更多的功能,后端在本地使用server-mock来模拟数据

https://github.com/a625689014/server-mock

最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
【社区内容提示】社区部分内容疑似由AI辅助生成,浏览时请结合常识与多方信息审慎甄别。
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。

相关阅读更多精彩内容

  • Android 自定义View的各种姿势1 Activity的显示之ViewRootImpl详解 Activity...
    passiontim阅读 177,526评论 25 709
  • Spring Cloud为开发人员提供了快速构建分布式系统中一些常见模式的工具(例如配置管理,服务发现,断路器,智...
    卡卡罗2017阅读 136,332评论 19 139
  • 我喜欢动物,毛茸茸的小家伙,围在我的身边,心里暖洋洋的。想吃东西了,跑到主人身边撒个娇。它们心里:哈哈,肉马上来...
    雷妍阅读 252评论 2 5
  • 时光如流水 荏苒间 沧海会桑田 趁 青春未老 逐 心之所趋 爱 至亲之人
    梦破寒凉阅读 631评论 1 3
  • 当写下这个问题的时候,我知道,我在向我的内心发问。 师者,所谓传道授业解惑也。这是古人对教身为师者的最好定义,在我...
    大野泽的风阅读 1,369评论 0 3

友情链接更多精彩内容