ajax 和 mock 数据

ajax

ajax是一种技术方案,但并不是一种新技术。它依赖的是现有的CSS/HTML/Javascript,而其中最核心的依赖是浏览器提供的XMLHttpRequest对象,是这个对象使得浏览器可以发出HTTP请求与接收HTTP响应。 实现在页面不刷新的情况下和服务端进行数据交互。

作用:
传统的网页(不使用ajax)。如果需要更新内容,必须重新加载整个网页,而通过使用ajax可以在后台与服务器进行少量数据交换,可以使网页实现异步更新。这意味着可以在不重新加载整个网页的情况下,对网页的某部分进行更新。

实现方式

  • XMLHttpRequest对象
  • fetch(兼容性不如XMLHttpRequest)
    兼容性查询

范例

GET 范例

//异步GET
var xhr = new XMLHttpRequest()
xhr.open(‘GET‘,‘/login?username=evenyao&password=123‘,true)  //get类型 数据需要拼接成url放到?后面
xhr.send()

console.log(‘readyState:‘,xhr.readyState)
xhr.addEventListener(‘readystatechange‘,function(){    //或者使用xhr.onload = function()
  //查看readyState状态
  console.log(‘readyState:‘,xhr.readyState)
})
xhr.addEventListener(‘load‘,function(){
  console.log(xhr.status)
  if((xhr.status >= 200 && xhr.status < 300)|| xhr.status === 304){
    var data = xhr.responseText
    console.log(data)
  }else{
    console.log(‘error‘)
  }
})
xhr.onerror = function(){
  console.log(‘error‘)
}

//等同代码
var xhr = new XMLHttpRequest()
xhr.open(‘GET‘,‘/login?username=evenyao&password=123‘,true)
xhr.send()
xhr.onreadystatechange = function(){
  if(xhr.readyState === 4){
    if((xhr.status >= 200 && xhr.status < 300)|| xhr.status === 304){
      console.log(xhr.responseText)
    }else{
      console.log(‘error‘)
    }
  }
}
xhr.onerror = function(){
  console.log(‘error‘)
}

POST 范例

//异步POST
var xhr = new XMLHttpRequest()
xhr.open(‘POST‘,‘/login‘,true)  //post拼接数据放掉send里面
//post拼接数据放掉send里面
xhr.send(makeUrl({
  username:‘evenyao‘,
  password:‘123‘
}))

xhr.addEventListener(‘load‘,function(){
  console.log(xhr.status)
  if((xhr.status >= 200 && xhr.status < 300)|| xhr.status === 304){
    var data = xhr.responseText
    console.log(data)
  }else{
    console.log(‘error‘)
  }
})
xhr.onerror = function(){
  console.log(‘error‘)
}

//makeUrl拼接函数
function makeUrl(obj){
  var arr = []
  for(var key in obj){
    arr.push(key + ‘=‘ + obj[key])
  }
  return arr.join(‘&‘)
}

封装 ajax

//封装 ajax
function ajax(opts){
  var url = opts.url
  //如果有类型就使用用户输入的类型; 如果没有,默认为后面的
  var type = opts.type || ‘GET‘
  var dataType = opts.dataType || ‘json‘
  var onsuccess = opts.onsuccess || function(){}
  var onerror = opts.onerror || function(){}
  var data = opts.data || {}

  //data序列化
  var dataStr = []
  for(var key in data){
    dataStr.push(key + ‘=‘ + data[key])
  }
  dataStr = dataStr.join(‘&‘)

  //GET类型 使用url拼接
  if(type === ‘GET‘){
    url += ‘?‘ + dataStr
  }

  //XMLHttpRequest对象创建
  var xhr = new XMLHttpRequest()
  xhr.open(type,url,true)
  xhr.onload = function(){
    if((xhr.status >= 200 && xhr.status < 300) || xhr.status == 304){
      //成功
      //如果返回的数据类型是json,就解析成json格式
      if(dataType === ‘json‘){
        onsuccess(JSON.parse(xhr.responseText))
      }else{
        onsuccess(xhr.responseText)
      }
    }else{
      onerror()
    }
  }
  //如果断网,也会执行onerror()
  xhr.onerror = onerror()

  //POST类型
  if(type === ‘POST‘){
    xhr.send(dataStr)
  }else{
    xhr.send()
  }
}

ajax({
  url:‘http://xxx‘,
  type: ‘POST‘,
  data: {
    city: ‘北京‘
  },
  onsuccess: function(ret){
    console.log(ret)
    render(ret)
  },
  onerror: function(){
    console.log(‘服务器异常‘)
    showError()
  }
})

function render(json){
}

function showError(){
}

参考

你真的会使用XMLHttpRequest吗?
Ajax状态值及状态码

关于如何mock数据

http-server

本地使用http-server node工具启动一个静态服务器
以下是已经写好的ajax用法,这里采用GET类型,使用xhr.open(‘GET‘,‘/hello2.json‘,true)
在已经安装好nodehttp-server的情况下,先cd到对应的文件夹。然后通过http-server启动本地server。

通过访问127.0.0.1:8080/indexl.html,并进入控制台,即可看到mock结果

具体ajax用法代码:

<!DOCTYPE html>
<html lang="en">
<head>
  <meta charset="UTF-8">
  <meta name="viewport" content="width=device-width, initial-scale=1.0">
  <meta http-equiv="X-UA-Compatible" content="ie=edge">
  <title>Document</title>
</head>
<body>
  <script type="text/javascript">
  // ajax GET
  var xhr = new XMLHttpRequest()
  xhr.open(‘GET‘,‘/hello2.json‘,true)
  xhr.send()
  xhr.onload = function(){
    console.log(xhr.status)
    if((xhr.status >= 200 && xhr.status < 300)|| xhr.status === 304){
      var data = xhr.responseText
      console.log(data)
      console.log(JSON.parse(data))
    }else{
      console.log(‘error‘)
    }
  }
  xhr.onerror = function(){
    console.log(‘error‘)
  }

  </script>
</body>
</html>

模拟接口的json文件内容:

//hello2.json 内容
{
  "name": "go",
  "success": true,
  "data": [
    "70",
    "80",
    "90",
    "年代"
  ]
}

github

在github上面写一个服务器进行mock
具体和本地区别不大,只是需要注意模拟接口的地址,因为域名是github.com,所以前面还需要加项目名,详情见github/mocktest里面的README.md
测试:
github pages

线上mock

使用easy-mock.com进行mock数据

  1. 进入easy-mock.com,登录注册账号之后进入创建项目,输入名称然后创建

  2. 进入创建好的项目

  3. 选择创建接口

  4. 填写类型(get/post)、描述、并输入JSON格式的内容,点击创建

  5. 生成链接,复制该链接

  6. 将该链接粘贴到之前写好的ajax用法的xhr.open(‘GET‘,‘‘,true)当中

    7.  打开页面,进入控制台查看mock结果

原文地址:https://www.cnblogs.com/evenyao/p/9404656.html

时间: 2024-10-12 15:38:16

ajax 和 mock 数据的相关文章

vue本地开发mock数据.md

目录 一.为什么要mock数据? 二.如何mock数据? 三.webpack本地代理配置 四.mockjs使用 五.easymock使用 一.为什么要mock数据? VUE项目开发过程中,前后端是完全分离,后端负责提供数据,前端负责数据展示,因此就会存在这种情况:前端需要用到数据接口的时候,后端还没开发出来,此时前端就要挂起吗?当然不是了,我们要解决的就是如何给前端模拟数据?从而实现前后端完全独立开发. 二.如何mock数据? 在团队协作过程中,在人员角色分工明确的情况下,我们可以先根据产品功能

Struts2.5 利用Ajax将json数据传值到JSP

AJAX +JSON=>JSP AJAX AJAX 是一种在无需重新加载整个网页的情况下,能够更新部分网页的技术. 通过在后台与服务器进行少量数据交换,AJAX 可以使网页实现异步更新.这意味着可以在不重新加载整个网页的情况下,对网页的某部分进行更新. 传统的网页(不使用 AJAX)如果需要更新内容,必须重载整个网页页面. JSON JSON(JavaScript Object Notation, JS 对象标记) 是一种轻量级的数据交换格式.它基于 ECMAScript (w3c制定的js规范

jQuery选取所有复选框被选中的值并用Ajax异步提交数据

昨天和朋友做一个后台管理系统项目的时候涉及到复选框批量操作,如果用submit表单提交挺方便的,但是要实现用jQuery结合Ajax异步提交数据就有点麻烦了,因为我之前做过的项目中基本上没用Ajax来批量提交复选框数据,今天用到了就分享一下. 由于我做的项目一些地方比较复杂,这里我只举一个小例子,能理解就好. 首先,我做了一个简单的多个复选框的界面,如图: 这是一个比较简单的多个复选框提交界面.代码如下: 1 <body> 2 <div> 3 <input type=&quo

nodejs构建mock数据

Nodejs构建mock数据并通过rest api风格调用接口访问数据 如果我们只有json格式的数据文件,我们想通过访问url方式调用居然数据 确保电脑安装node环境 如果你没有安装好node环境请移步http://nodejs.cn/ 一.安装json-server 1.新建demo文件 cd demo 2.安装json-server npm install -S json-server 3.项目demo目录下,新建一个 JSON 文件data.json和一个package.json文件

用ajax获取后台数据,返回json数据,怎么在前台使用?

用ajax获取后台数据,返回json数据,怎么在前台使用呢? 后台 C# code ? 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 if (dataType == "SearchCustomer")                 {                     int ID;                     if (Int32.TryParse(CustomerID, out ID))                     {    

jquery $.ajax 获取josn数据

<script type="text/javascript" src="jquery-1.9.1.js"></script> <script type="text/javascript"> function test() { $.ajax({ type: "get", cache: false, url: "../../ajax/Task.aspx", data: 'id

滑轮滚动到页面底部ajax加载数据

滚动下拉到页面底部加载数据是很多瀑布流网站的做法,那来看看配合jsonp是如何实现的吧 当然本例子采用的是jquery库,后期会做成原生js.本例的数据调用的是锋利的jquery一书提供的一段json. 首先要先判断页面怎么样才是滚动到底部,也就是scrollTop+window的height是否大于document的height,jquery如下代码: $(window).scrollTop()+$(window).height()>=$(document).height(): 再给windo

ExtJS学习笔记2:响应事件、使用AJAX加载数据

响应事件: 1.设置一个html标记 <div id="my-div">Ext JS 4 Cookbook</div> 2.使用get函数获取此标记对象 var el = Ext.get('my-div'); 3.将响应函数和对象的事件绑定 el.on('click', function(e, target, options){ alert('The Element was clicked!'); alert(this.id); }, this); 4.一次也可

ajax请求返回数据,模板中的数据处理

/*ajax请求返回数据,模板中的数据处理*/ function QueryGameAsset(){ var new_start_time=$('#new_start_time').val();//开始时间 var new_end_time=$('#new_end_time').val();//结束时间 if(!new_start_time||!new_end_time){ alert("时间不能为空"); return false; } $.ajax({ url:'/Statisti