Ajax、server-mock的使用

ajax 是什么?有什么作用?

  1. AJAX全称为“Asynchronous JavaScript and XML”(异步JavaScript和XML),
    是一种技术的泛称,可以在不重新加载整个网页的情况下向服务器请求额外的数据,实现对网页的某部分进行更新,带来良好的用户体验。

AJAX和XMLHttpRequest的关系:
我们使用XMLHttpRequest对象来发送一个Ajax请求。

传统HTTP请求流程大概如下:

  • 浏览器向服务器发起请求
  • 服务器根据浏览器传递的数据生成responsive
  • 服务器将responsive返回给浏览器
  • 浏览器刷新整个页面显示最新数据

这些过程是同步的,会顺序执行。
AJAX在浏览器与web服务器之间使用异步数据传输(HTTP请求)从服务器获取数据,这里的异步指脱离当前浏览器页面的请求、加载等单独执行,这意味着可以在不重新加载整个网页的情况下通过JavaScript发送请求、接收服务器传来的数据,操作DOM将更新某部分网页的数据,使用AJAX对用户来说最直观的感受是获取新数据无需刷新页面。

  1. AJAX优缺点
  • 优点:
    • 更新数据页面无需刷新,用户体验更佳
    • 使用异步方式与服务器通信,响应速度更快
    • 可将服务器以前负担的一些工作转嫁到客户端,利用客户端的闲置能力来处理,减轻服务器和带宽的负担,节约空间和宽带租用成本。AJAX的原则是“按需取数据”,可最大程度减少冗余请求
    • 作为基于标准化的并被广泛支持的技术,无需下载插件或小程序
    • 使因特网应用程序更小、更快、更友好
  • 缺点:
    • 不支持浏览器back按钮
    • AJAX暴露了与服务器交互的细节带来安全问题
    • 对搜索引擎的支持较弱
    • 破坏了程序的异常机制
    • 不容易调试

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

在开发之前,前后端需要协作商定数据和接口的各项细节,后端负责提供数据,前端负责展示数据(根据数据负责页面的开发)

  • 前后端开发联调注意事项:

    • URL:接口名称
    • 发送请求的参数和格式(get/post)
    • 数据响应的数据格式(数组/对象)
    • 根据前后端约定,整理接口文档
  • 如何mock数据

    • 搭建web服务器
    • 根据接口文档仿造假数据
    • 关联前后端文件,开启web服务器
    • 验证前端页面功能及显示是否正确

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

初始时上锁,请求开始时解锁,请求结束时继续上锁,注意代码的执行顺序与书写顺序并不一致,涉及到异步的代码总是后执行,比如下列代码中,ajax部分会先执行open和send和lock=false,后执行onload和onerror

//添加一个状态锁,初始为true,上锁为true,解锁为false
var lock = true
btn.addEventListener('click', function () {
    //状态为false时直接return
    if (!lock) {
        return
    }
    var xhr = new XMLHttpRequest()
    xhr.open('GET', url, true)
    xhr.onload = function () {
        //状态正确时拿到结果,此次请求结束,上锁
        if ((xhr.status >= 200 && xhr.status < 300) || xhr.status === 304) {
            console.log(xhr.responseText)
        } else {
            console.log('error')
        }
            lock = true
    }
    xhr.onerror = function () {
        console.log('error')
    }
    xhr.send()
    //解锁,这时候请求开始
    lock = false
})

封装ajax

function ajax() {
  var url = opts.url
  var data = opts.data || {}
  var type = opts.type || 'GET'
  var dataType = opts.dataType || 'json'
  var onsuccess = opts.onsuccess || function () { }
  var onerror = opts.onerror || function () { }

  var dataStr = []
  for (var key in data) {
    dataStr.push(key + '=' + data[key])
  }
  dataStr = dataStr.join('&')

  if (type === 'GET') {
    url += '?' + dataStr
  }//get方法将字符串放在url末尾

  var xhr = new XMLHttpRequest()
  xhr.open(type, url, true)
  xhr.onload = function () {
    if ((xhr.status >= 200 && xhr.status < 300) || xhr.status == 304) {
      if (dataType === 'json') {
        onsuccess(JSON.parse(xhr.responseText))
      } else {
        onsuccess(xhr.responseText)
      }
    } else {
      onerror()
    }
  }
  xhr.onerror = onerror

  if (type === 'POST') {
    xhr.send(dataStr)//post方法将字符串放在send中
  } else {
    xhr.send()//get的send内容
  }
}

ajax({
  url: 'http://api.jirengu.com/weather.php',
  data: {
    city: '北京'
  },
  onsuccess: function (ret) {
    console.log(ret)
  },
  onerror: function () {
    console.log('服务器异常')
  }
})

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


参考资料

最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
  • 序言:七十年代末,一起剥皮案震惊了整个滨河市,随后出现的几起案子,更是在滨河造成了极大的恐慌,老刑警刘岩,带你破解...
    沈念sama阅读 216,402评论 6 499
  • 序言:滨河连续发生了三起死亡事件,死亡现场离奇诡异,居然都是意外死亡,警方通过查阅死者的电脑和手机,发现死者居然都...
    沈念sama阅读 92,377评论 3 392
  • 文/潘晓璐 我一进店门,熙熙楼的掌柜王于贵愁眉苦脸地迎上来,“玉大人,你说我怎么就摊上这事。” “怎么了?”我有些...
    开封第一讲书人阅读 162,483评论 0 353
  • 文/不坏的土叔 我叫张陵,是天一观的道长。 经常有香客问我,道长,这世上最难降的妖魔是什么? 我笑而不...
    开封第一讲书人阅读 58,165评论 1 292
  • 正文 为了忘掉前任,我火速办了婚礼,结果婚礼上,老公的妹妹穿的比我还像新娘。我一直安慰自己,他们只是感情好,可当我...
    茶点故事阅读 67,176评论 6 388
  • 文/花漫 我一把揭开白布。 她就那样静静地躺着,像睡着了一般。 火红的嫁衣衬着肌肤如雪。 梳的纹丝不乱的头发上,一...
    开封第一讲书人阅读 51,146评论 1 297
  • 那天,我揣着相机与录音,去河边找鬼。 笑死,一个胖子当着我的面吹牛,可吹牛的内容都是我干的。 我是一名探鬼主播,决...
    沈念sama阅读 40,032评论 3 417
  • 文/苍兰香墨 我猛地睁开眼,长吁一口气:“原来是场噩梦啊……” “哼!你这毒妇竟也来了?” 一声冷哼从身侧响起,我...
    开封第一讲书人阅读 38,896评论 0 274
  • 序言:老挝万荣一对情侣失踪,失踪者是张志新(化名)和其女友刘颖,没想到半个月后,有当地人在树林里发现了一具尸体,经...
    沈念sama阅读 45,311评论 1 310
  • 正文 独居荒郊野岭守林人离奇死亡,尸身上长有42处带血的脓包…… 初始之章·张勋 以下内容为张勋视角 年9月15日...
    茶点故事阅读 37,536评论 2 332
  • 正文 我和宋清朗相恋三年,在试婚纱的时候发现自己被绿了。 大学时的朋友给我发了我未婚夫和他白月光在一起吃饭的照片。...
    茶点故事阅读 39,696评论 1 348
  • 序言:一个原本活蹦乱跳的男人离奇死亡,死状恐怖,灵堂内的尸体忽然破棺而出,到底是诈尸还是另有隐情,我是刑警宁泽,带...
    沈念sama阅读 35,413评论 5 343
  • 正文 年R本政府宣布,位于F岛的核电站,受9级特大地震影响,放射性物质发生泄漏。R本人自食恶果不足惜,却给世界环境...
    茶点故事阅读 41,008评论 3 325
  • 文/蒙蒙 一、第九天 我趴在偏房一处隐蔽的房顶上张望。 院中可真热闹,春花似锦、人声如沸。这庄子的主人今日做“春日...
    开封第一讲书人阅读 31,659评论 0 22
  • 文/苍兰香墨 我抬头看了看天上的太阳。三九已至,却和暖如春,着一层夹袄步出监牢的瞬间,已是汗流浃背。 一阵脚步声响...
    开封第一讲书人阅读 32,815评论 1 269
  • 我被黑心中介骗来泰国打工, 没想到刚下飞机就差点儿被人妖公主榨干…… 1. 我叫王不留,地道东北人。 一个月前我还...
    沈念sama阅读 47,698评论 2 368
  • 正文 我出身青楼,却偏偏与公主长得像,于是被迫代替她去往敌国和亲。 传闻我的和亲对象是个残疾皇子,可洞房花烛夜当晚...
    茶点故事阅读 44,592评论 2 353

推荐阅读更多精彩内容

  • AJAX 原生js操作ajax 1.创建XMLHttpRequest对象 var xhr = new XMLHtt...
    碧玉含香阅读 3,195评论 0 7
  • 本文详细介绍了 XMLHttpRequest 相关知识,涉及内容: AJAX、XMLHTTP、XMLHttpReq...
    semlinker阅读 13,657评论 2 18
  • Spring Cloud为开发人员提供了快速构建分布式系统中一些常见模式的工具(例如配置管理,服务发现,断路器,智...
    卡卡罗2017阅读 134,651评论 18 139
  • 前一段时间,有天晚上我吃完饭回家,坐电梯到21楼,刚出电梯就听见楼梯间里传来呼呼声,断断续续的。 我一听,愣了一下...
    魏武阅读 189评论 0 1
  • 目录 白逸的父亲先离开了,我一个人坐在那儿,突然莫名委屈。 “紫苏。”耳边传来熟悉的声音,我抬头一看,张天然正站在...
    原小尚阅读 396评论 15 3