美文网首页
ajax实践

ajax实践

作者: billa_8f6b | 来源:发表于2017-06-14 16:57 被阅读0次

1.ajax 是什么?有什么作用?

Ajax(Asynchronous JavaScript + XML)是一种创建交互式网页应用的开发技术,利用Ajax可以向服务器请求额外的数据而无须卸载页面,会带来更好的用户体验。
Ajax特点:

  • Ajax通过JavaScript发送请求、接受服务器传来的数据,然后操作DOM将新数据对网页的某部分进行更新。
  • Ajax的核心是XMLHttpRequest对象

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

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

  1. 约定接口数据:包括接口名称,前端需要传的查询数据格式,后台返回的数据格式,请求方式(get/post/...)

  2. 根据约定生成接口文档

mock数据方式:
使用nodejs搭建服务器,如安装server-mock,在项目所在的根目录创建router.js文件,修改router.js代码,添加方法模拟接收前端请求,并返回数据。


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

设置一个状态锁变量,当没有ajax请求前,是解锁状态,默认设为false。当点击触发ajax请求后,设置上锁状态true,直到ajax返回结果后,才能开锁。

var isSending= false;
btn.addEventListener("click",function(){
    if(isSending){
        return
    }
    var xhr = new XMLHttpRequest()
    xhr.onreadystatechange = function(){
        if(xhr.readystate === 4){
            if(xhr.readystate === 200||xhr.readystate === 304){
               ...
             }    
            isSending = false;//状态为4可以解锁
        }         
    }       
    xhr.open('get','/index?length',true)
    xhr.send()
    isSending = true;  //上锁,禁止在请求完成前发请求
})

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

<!doctype html>
<html>

<head>
</head>
<style>
    .ct {
        width: 800px;
        margin: 50px auto;
    }
    
    * {
        margin: 0;
        padding: 0;
    }
    
    ul {
        list-style: none;
    }
    
    ul li {
        height: 22px;
        padding: 10px;
        margin: 10px;
        border: 1px solid #777;
        cursor: pointer;
    }
    
    ul li:hover {
        background: yellowgreen;
    }
    
    #load-more {
        display: block;
        width: 80px;
        height: 40px;
        line-height: 40px;
        border: 1px solid #E27272;
        border-radius: 5px;
        color: #E27272;
        text-decoration: none;
        text-align: center;
        margin: 10px auto;
    }
    
    #load-more:hover {
        background-color: #E27272;
        color: #000;
    }
    
    #load-more.disabled {
        background-color: #ccc;
        color: #777;
        border-color: #777;
    }
    
    #load-more img {
        height: 40px;
        width: 40px;
    }
</style>

<body>
    <div class="ct">
        <ul class="content-ct">
            <li>测试1</li>
            <li>测试2</li>
            <li>测试3</li>
        </ul>

        <a href="javascript:void(0)" id="load-more" data-sending="false">加载更多</a>
    </div>


    <script>
        var btn = document.querySelector('#load-more')
        var index = 1;
        var length = 5;

        btn.addEventListener('click', function() {
            var isSending = btn.dataset.sending;

            if ('true' === isSending) {
                return false;
            }

            var xhr = new XMLHttpRequest()
            xhr.onreadystatechange = function() {
                if (xhr.readyState === 4 && (xhr.status === 200 || xhr.status === 304)) {
                    var content = JSON.parse(xhr.responseText)
                    render(content);
                    index = index + length;

                    //完成请求后解锁
                    var isSending = false;
                    btn.dataset['sending'] = isSending;

                    loadMoreDisplay(btn.dataset.sending);
                }
            }

            xhr.open('get', '/news?&index=' + index + '&length=' + length, true)
            xhr.send()

            //设置锁
            btn.dataset['sending'] = true;

            //设置按钮样式
            loadMoreDisplay(btn.dataset.sending)
        })


        function render(content) {
            var ul = document.querySelector('.content-ct');
            var df = document.createDocumentFragment();

            content.forEach(function(element) {
                var li = document.createElement('li');
                li.innerText = element;
                df.appendChild(li);
            });

            ul.appendChild(df);
        }

        function loadMoreDisplay(isSending) {
            if ('true' === isSending) {
                btn.innerHTML = '![](imgs/loading.gif)';
            } else {
                btn.innerHTML = '加载更多';
            }
        }
    </script>

</body>

</html>

相关文章

  • ajax实践

    1、 ajax 是什么?有什么作用? ajax即asynchronous javascript and xml(异...

  • ajax实践

    1、ajax 是什么?有什么作用? ajax,即Asynchronous JavaScript and XML(异...

  • Ajax实践

    在了解ajax之前,我们先粗略的了解一下http协议 HTTP协议 http事务 一个完整的http请求是怎样的呢...

  • ajax 实践

    题目1: ajax 是什么?有什么作用? ajax是一种技术方案,但并不是一种新技术。它依赖的是现有的CSS/HT...

  • ajax实践

    1.ajax 是什么?有什么作用? Ajax是Asynchronous JavaScript and XML的缩写...

  • Ajax实践

    1.ajax 是什么?有什么作用? AJAX(Asynchronous JavaScript and XML)是一...

  • ajax实践

    题目1: ajax 是什么?有什么作用? AJAX = Asynchronous JavaScript And X...

  • ajax实践

    题目1: ajax 是什么?有什么作用? AJAX的全称是Asynchronous JavaScript and ...

  • ajax实践

    http://www.w3school.com.cn/ajax/index.asp状态码 题目1: ajax 是什...

  • ajax实践

    题目1: ajax 是什么?有什么作用? ajax即“Asynchronous JavaScript and XM...

网友评论

      本文标题:ajax实践

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