ajax

作者: 好好顽 | 来源:发表于2017-07-06 00:50 被阅读38次

    题目1: ajax 是什么?有什么作用?
    Ajax的全称是Asynchronous JavaScript and XML(异步的JavaScript和XML)。Ajax是多种技术的组合,包括JavaScript异步数据获取技术XMLHttpRequest、xml、Dom、XHTML和CSS。Ajax的核心是XMLHttpRequest,是支持异步请求的技术,可以发送请求给服务器,并且不阻塞用户,其实XMLHttpRequest是JavaScript的一种语法子集,是它的一套API,支持发送GET和POST请求。使用Ajax技术不必刷新整个页面,只需对页面的局部进行更新,可以节省网络带宽,提高页面的加载速度,从而缩短用户等待时间,改善用户体验。

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

    • 约定接口:接口类型(get/post)、接口名字(地址)、传递参数(参数类型、具体参数)、后端给的响应(返回什么样的结果)
    • mock 数据:根据约定好的接口,可以使用server-mock来模拟后台环境,在router.js写后台传给浏览器的数据,通过模拟数据可以预先测试实现的功能。

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

    var locked = false;
    function ajax(){
        if (locked === true) {
            return
        }
        locked = true;
        var xhr = new XMLHttpRequest();
        xhr.open();
        xhr.send();
        xhr.readystatechange = function(){
            if (xhr.readyState === 4) {
                locked = false;
            }
        }
    }
    

    题目4:实现加载更多的功能,效果范例295,后端在本地使用server-mock来模拟数据
    前端

    <!doctype html>
    <html lang="en">
    <head>
      <meta charset="UTF-8">
      <title>Document</title>
      <style>
        * {
          margin: 0;
          padding: 0;
          list-style: none;
        }
        #wrap li {
          height: 50px;
          line-height: 50px;
          border: 1px solid black;
          margin: 20px 10px;
        }
        #btn {
          display: block;
          margin: 10px auto;
          text-align: center;
          cursor: pointer;
          height: 40px;
          line-height: 40px;
          width: 80px;
          border: 1px solid #E27272;
          border-radius: 3px;
          text-decoration: none;
          color: #E27272;
        }
      </style>
    </head>
    <body>
    <div id="wrap">
      <ul id="ul">
        <li>内容1</li>
        <li>内容2</li>
        <li>内容3</li>
      </ul>
      <a id="btn" href="#">加载更多</a>
    </div>
    
    <script>
      var btn = document.querySelector("#btn")
      var ul = document.querySelector("#ul")
      var pageInd = 4
      var dataArrive = true
    
      btn.addEventListener("click",function(e){
        e.preventDefault()
        if(!dataArrive){
          return
        }
        var xhr = new XMLHttpRequest()
        xhr.onreadystatechange = function(){
          if(xhr.readyState == 4){
            if(xhr.status == 200 || xhr.status == 304){
              var results = JSON.parse(xhr.responseText);
              for(var i=0; i<results.length; i++){
                var node = document.createElement("li")
                node.innerText = results[i]
                ul.appendChild(node)
              }
            }else{
              console.log("出错啦")
            }
          pageInd += 5
          dataArrive = true
          }
        }
        xhr.open("get","/loadMore?index="+pageInd+"&length=5",true)
        xhr.send()
        dataArrive = false
      })
    </script>
    </body>
    

    后端

    function setRouter(app){ 
     var router = app; 
    
    app.get('/loadMore', function(req, res) {
        var index = req.query.index;
        var len = req.query.length;
        var data = [];
    
        for (var i = 0; i < len; i++) {
            data.push('内容' + (parseInt(index) + i));
        }
    
        res.send(data);
    })
    }
     module.exports.setRouter = setRouter
    

    相关文章

      网友评论

          本文标题:ajax

          本文链接:https://www.haomeiwen.com/subject/pemchxtx.html