AJAX

作者: 湖衣 | 来源:发表于2017-05-08 19:40 被阅读0次

AJAX是微软发明
用js发一个请求啊
ajax是不刷新页面请求的唯一方法

get在req.query里面
post在req.body里面

浏览器发出请求:
1.地址栏输入网址url
2.link css
3.img src = xxx
4.script = xxx
5.form表单也可以发请求(当用户点击提交时)

面试
onreadystatuchange
statu === 4 才是完成
readystatu

题目1: ajax 是什么?有什么作用?
AJAX = 异步 JavaScript 和 XML。描述了一种将新的现有技术一起使用的“新”方法, 包括: HTML或 XHTML, CSS, JavaScript, DOM, XML, XSLT, 最重要的是 XMLHttpRequest 对象。
通过在后台与服务器进行少量数据交换,AJAX 可以使网页实现异步更新。这意味着可以在不重新加载整个网页的情况下,对网页的某部分进行更新。

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

  • 约定数据:需要传输的数据以及数据类型;
  • 约定接口:接口名称,请求和响应的格式,请求的参数名称,响应的数据格式;
  • 根据这些约定整理成接口文档。

后端接口完成前如何 mock 数据:

  • 可以根据接口文档,使用假数据来验证我们制作的页面响应和接口是否正常。
  • 可以搭建php本地服务器用,php写脚本提供临时数据;
  • 也可使用Mock.js,它能拦截ajax请求并根据请求中的内容来随机生成符合你要求的假数据,模拟后端环境让你完成对页面和接口的测试。

题目3:点击按钮,使用 ajax 获取数据,如何在数据到来之前防止重复点击?
添加一个状态锁,在触发ajax前先上锁,之后用户再怎么点击都不会触发ajax,直到ajax代码执行完才会触发。

var btn = document.querySelector('.btn');
var lock = false; 

btn.addEventListener('click',function(e){
    e.preventDefault();

    if(lock){
        return;
    }else{
        lock = true;
        ajax({
            ...
            },
            success: function(){
                ...
                lock = false;
            },

            error: function(){
                ...
                lock = false;
            }
        });  
    }
})

题目4:封装一个 ajax 函数,能通过如下方式调用。后端在本地使用server-mock来 mock 数据

function ajax(opts){
  var xhr = new XMLHttpRequest()
  xhr.onreadystatechange = function(){
      if(xhr.readyState === 4){
          if(xhr.status === 200 || xhr.status === 304){
              var results = JSON.parse(xhr.responseText)
              opts.success('results')
          }else{
              opts.error()
          }
      }
  }
  var query = '?'
  for (key in opts.data){
      query += key + '=' + opts.data[key] + '&'
  }
  query = query.substr(0, query.length-1)
  xhr.open(opts.type, opts.url+query, true)
  xhr.send()
}
document.querySelector('#btn').addEventListener('click', function(){
    ajax({
        url: '/login',   //接口地址
        type: 'get',               // 类型, post 或者 get,
        data: {
            username: 'xiaoming',
            password: 'abcd1234'
        },
        success: function(ret){
            console.log(ret);       // {status: 0}
        },
        error: function(){
           console.log('出错了')
        }
    })
});

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

<!DOCTYPE html>
<html>
<head>
  <meta charset="utf-8">
  <title>JS Bin</title>
  <style>
    ul,li{
        margin: 0;
        padding: 0; 
    }

    #ct li{
        list-style: none;
        border: 1px solid #ccc;
        padding: 10px;
        margin-top: 10px;
        cursor: pointer;
    }

    #load-more{
        display: block;
        margin: 10px auto;
    }

    .btn{
        display: inline-block;
        text-decoration: none;
        color: #E27272;
        border: 1px solid #E27272;
        border-radius: 3px;
        text-align: center;
        height: 40px;
        width: 80px;
        line-height: 40px;
    }

    .hover{
        background: green;
        color: #fff;
    }
  </style>
</head>
<body>
  <ul id='ct'>
    <li>内容1</li>
    <li>内容2</li>
  </ul>
  <a href="#" class='btn' id='load-more'>加载更多</a>
  <script>
    var ct = document.querySelector('#ct');
var loadMoreBtn = document.querySelector('#load-more');

ct.addEventListener('mouseover',function(e){
  if(e.target.tagName.toLowerCase() === 'li'){
    e.target.classList.add('hover');
  }
});

ct.addEventListener('mouseout',function(e){
  if(e.target.tagName.toLowerCase() === 'li'){
    e.target.classList.remove('hover');
  }
});

var lock = false;
var count = 3;

loadMoreBtn.addEventListener('click',function(e){
  e.preventDefault();
  
  if(lock){
    return;
  }else{
    lock = true;
    
    ajax({
      url: 'loading...',
      type: 'get',
      data: {
        start: count,
        length: 6
      },
      success: function(json){
        if(json.status === 1){
          append(json.data);
          count += 6;
        }else{
          console.log('失败');
        }
        lock = false;
      },

      error: function(){
        alert('出现错误');
        lock = false;
      }

    });  
  }
  
  
});

function append(arr){
  for(var i=0; i<arr.length; i++){
    var li = document.createElement('li');
    li.innerHTML = '内容'+arr[i];
    ct.appendChild(li);
  }
}


function ajax(opts){
  var xhr = new XMLHttpRequest();
  xhr.onreadystatechange = function(){
      if(xhr.readyState === 4){
          if(xhr.status === 200 || xhr.status === 304){
              var results = JSON.parse(xhr.responseText);
              opts.success(json);
          }else{
              opts.error();
          }
      }
  };
  
  var query = '';
  for (var key in opts.data){
      query += key + '=' + opts.data[key] + '&';
  }
  query = query.substr(0, query.length-1);
  xhr.open(opts.type, opts.url+query, true);
  xhr.send();
}
  </script>
</body>
</html>

直播课:
关键概念
服务器
网站

相关文章

  • AJAX

    主要内容: ajax 是什么、原生ajax 写法和jQuery ajax写法。 AJAX 是什么 ajax,即As...

  • JavaScript进阶知识点--AJAX及JSON

    AJAX 关于 AJAX 什么是 AJAX AJAX 的全称是 Asynchronous JavaScript a...

  • HTML5权威指南 | 第五部分 高级功能

    三十二、使用AJAX(上) Ajax起步: 使用Ajax事件: Ajax请求的错误处理: 中止Ajax请求: 三十...

  • ajax学习笔记

    Ajax学习笔记 Ajax简介 1. Ajax是什么? Ajax : Asynochronous javascri...

  • AJAX

    一、简介 AJAX菜鸟教程 什么是 AJAX ? AJAX = 异步 JavaScript 和 XML。 AJAX...

  • js之AJAX复习

    异步交互和同步交互 什么是Ajax? Ajax的工作原理。 Ajax包含的技术: Ajax的缺陷: Ajax的核心...

  • 复习jQuery - ajax

    jQuery ajax - ajax() 方法 $.ajax({ url:'oo.php', ...

  • jQuery中Ajax请求的使用和四个步骤示例

    ajax() 方法用于执行 AJAX(异步 HTTP)请求,所有的 jQuery AJAX 方法都使用 ajax(...

  • ajax

    1、什么是ajax? 2、ajax的原理 3、ajax的核心对象 4、ajax的优点: ajax的缺点: 被jqu...

  • ajax

    Ajax 1 - 请求纯文本 Ajax 2 - 请求JSON数据 Ajax 3 - 请求Github接口 Ajax...

网友评论

      本文标题:AJAX

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