• 关于 AJAX异步与同步 的搜索结果

问题

jquery $.ajax() 同步与异步区别

小旋风柴进 2019-12-01 19:24:15 894 浏览量 回答数 1

回答

Ajax 是什么: 1. 通过异步模式,提升了用户体验 2. 优化了浏览器和服务器之间的传输,减少不必要的数据往返,减少了带宽占用 3. Ajax 在客户端运行,承担了一部分本来由服务器承担的工作,减少了大用户量下的服务器负载。 Ajax 的最大的特点: 1. Ajax可以实现动态不刷新(局部刷新) 2. readyState 属性 状态 有5个可取值: 0 = 未初始化,1 = 启动, 2 = 发送,3 = 接收,4 = 完成 Ajax 同步和异步的区别: 1. 同步:提交请求 -> 等待服务器处理 -> 处理完毕返回,这个期间客户端浏览器不能干任何事 2. 异步:请求通过事件触发 -> 服务器处理(这是浏览器仍然可以作其他事情)-> 处理完毕 ajax.open方法中,第3个参数是设同步或者异步。 Ajax 的缺点: 1. Ajax 不支持浏览器 back 按钮 2. 安全问题 Ajax 暴露了与服务器交互的细节 3. 对搜索引擎的支持比较弱 4. 破坏了程序的异常机制 5. 不容易调试 解决跨域问题: 1. jsonp 2. iframe 3. window.name、window.postMessage 4. 服务器上设置代理页面

小柯卡力多 2019-12-02 03:23:36 0 浏览量 回答数 0

回答

Ajax不是荷甲豪门阿贾克斯,而是用来描述一组技术,它使浏览器可以为用户提供更为自然的浏览体验。在Ajax之前,Web站点强制用户进入提交/等待/重新显示范例,用户的动作总是与服务器的“思考时间”同步。Ajax提供与服务器异步通信的能力,从而使用户从请求/响应的循环中解脱出来。借助于Ajax,可以在用户单击按钮时,使用JavaScript和DHTML立即更新UI,并向服务器发出异步请求,以执行更新或查询数据库。当请求返回时,就可以使用JavaScript和CSS来相应地更新UI,而不是刷新整个页面。最重要的是,用户甚至不知道浏览器正在与服务器通信:Web站点看起来是即时响应的。

murrowhuang 2019-12-02 02:01:28 0 浏览量 回答数 0

新手开公司,教你化繁为简

开公司到底有没有那么难,传统的手续繁琐,线下跑断腿,场地搞不定等问题,通过阿里云”云上公司注册“解决你的烦恼。

问题

同步异步与回调

chenchuan 2019-12-01 21:37:37 1178 浏览量 回答数 0

问题

ajax异步

杨冬芳 2019-12-01 20:07:09 837 浏览量 回答数 1

回答

真正的问题不在于“怎么赋给外面用”,而是“何时外面才能用”。为了理解这一点,你得明白什么是 async programming(异步编程),看这个虚构例子: var outside // 0. 我在外面 $.getJSON('/some/api/endpoint', function(response) { outside = response // 1. 你当然可以把响应数据赋值给外面的代码 }) console.log(outside) // 2. 但是你没法保证接下来的代码能正确运行 // 因为以上代码的运行顺序是 0 -> 2 -> 1从 0 到 2,代码是自上而下同步运行的,然而 1(注意:1 是 $.getJSON 的回调函数而不是 $.getJSON 方法本身)是在之后运行的,并且确切的时间无法预知,它取决于对于 '/some/api/endpoint' 的请求何时返回。所以上面的虚拟例子从语法上来说没有任何问题,你只是无法保证它能运行出期望的结果罢了(在现实中由于 event loop 的机制,1 总是晚于 2 运行的)。 So,我们不知道何时异步回调会执行(只知道它晚于同步代码),那我们怎么办?幸运的是我们知道:“反正它会运行的”(除非请求失败,然而那属于错误处理或异常处理的部分,此处我们只谈 happy path),所以我们就告诉它:“当它运行时该做什么”就是了。所以之前的例子可以改写一下: var outside $.getJSON('/some/api/endpoint', function(response) { outside = response // 你还是可以把响应数据赋值给外面的代码 console.log(outside) // 然后再执行相应的逻辑,因为这里面是同步的,你能保证顺序 }) 当然这个例子太简单了,以至于 outside 这个变量根本就是个摆设(who cares),领会精神就好。当然在实际中,由于代码组织的关系,我们不总是能把逻辑上的顺序按照线性的方式自上而下的写代码,不过没关系只要你心中始终拎清楚现在正在写的代码将在何时运行就好。举例而言,稍微改动一下上面的例子: var outside // 我不知道什么时候,但终将在某一时刻我要打印出 outside 的值 // 至于这个值是什么就看到时候是谁传 response 进来了 // 注意:这也同时暗示着,此函数的调用者一定要传递一个 response 进来,否则接下来的代码无意义 function printOutside(response) { outside = response console.log(outside) } // ... // 接着在未来的某个时候,某个请求调用了 printOutside 函数,outside 被顺利赋值并打印$.getJSON('/some/api/endpoint', printOutside)实际上,最后的 $.getJSON 写在 printOutside 的前面或后面都无所谓,它总是能正确运行的,因为无论写前写后,同步代码的解释执行都会先于 printOutside 被调用。而作为函数声明 $.getJSON 也总是能找到正确的 printOutside 函数(hoisting)。 这就是你想知道的“怎样给外面用”的最核心的知识,我尽可能通俗的讲解了。不过现实中会有非常多复杂的情形,比如最常见的:“异步回调里面再异步请求回调再异步请求回调再……”,也就是俗称的“回调地狱”——就需要更复杂一些的手段来让它们乖乖听话。这些进阶的知识其实并不难,只是在我之前描述的概念之上更进一步罢了。 那么最后我在给你点明一下如何在这个概念上进阶一步。想想看如果你是 jQuery 的作者(或者其他类似异步请求函数的作者),你要如何定义 $.getJSON 这个函数?重点是:你如何赋予使用者自由定义回调函数,然后你能确保它正确运行?先自己想想,然后看下面的伪代码: // 这里,我要定义这个 getJSON;本质上,它是对一个 xhr 请求的封装 $.prototype.getJSON = function(path, callback) { // 使用者需要告诉我两个条件:1,请求的 path;2,请求返回后要执行的 callback // 接着我开始封装 xhr 请求,具体的代码请参考 javascript 的 API 手册 // 比如这里:https://developer.mozilla.org/en-US/docs/AJAX/Getting_Started var xhr = new XMLHttpRequest() // 初始化一个 xhr 对象 xhr.onreadystatechange = function() { // xhr 请求发出后会有多种状态变化(根据请求的发送及接受情况),这个函数用于处理各种状况 // 因此真实的代码这里会比较复杂,然而最终一切 OK 的话我们能获得正确的 response // 要注意的是,此函数必须在 send 之前定义,否则 send 完之后 xhr 对象并不知道该继续做什么 // 这也就暗示着,onreadystatechange 其实是 send 在某一时刻调用的 // 这与前面的 printOutside 的例子有异曲同工之妙 // 拿到 response 之后我们开始调用 callback,并把 response 传递进去 callback(xhr.responseText) } xhr.open('GET', path) // 配置 xhr 的请求参数 xhr.send() // 发送真正的请求 } 真正的 jQuery 自然要比这个伪代码例子复杂多了(就连 xhr 的封装都不是在这里做的,我没记错的话 jQuery 还有更底层的函数,$.ajax?),它要处理的问题可不仅仅是调用 callback 这么简单,不过一旦你从作者角度明确了 callback 是如何被调用的,那么从使用者的角度来考量该如何利用 callback 就变得自然而然毫无窒碍了,这也就是常说的“知其然并知其所以然”。 有心的话,再研究一个举一反三的小题目吧(不难),研究明白了就能再上一个台阶。题目如下: 我们已经了解了这样的写法和用法: $.getJSON('some/api/endpoint', function(response) { // do something... }) 那么这样的写法和用法又是怎么实现的呢? $.getJSON('some/api/endpoint'[, maybeSomeAdditionalParams]) .success(function(response) { // do something when request is OK }) .fail(function(error) { // do something when it is NOT OK }) 一旦你掌握了这类写法是如何定义的,你就 get 到了新的姿势来处理可能存在的异步回调嵌套问题,并且这也是接下来你去学习更先进的异步编程范式的基础(比如 promises 等)。GL!

小旋风柴进 2019-12-02 02:22:52 0 浏览量 回答数 0

问题

前端面试经典题目合集

小柯卡力多 2019-12-01 22:06:33 14 浏览量 回答数 0

问题

【精品问答】前端开发必懂之JS技术二百问

茶什i 2019-12-01 22:05:04 146 浏览量 回答数 0

问题

Web页面的刷新问题 400 请求报错 

kun坤 2020-05-29 11:26:16 3 浏览量 回答数 1

问题

【技术干货】原来阿里云自助实验室的系统架构是这样的啊

驻云科技 2019-12-01 21:07:14 9011 浏览量 回答数 1

回答

1 js 的基本数据类型? 2 JavaScript 有几种类型的值? 3 什么是堆?什么是栈?它们之间有什么区别和联系? 4 内部属性 [Class] 是什么? 5 介绍 js 有哪些内置对象? 6 undefined 与 undeclared 的区别? 7 null 和 undefined 的区别? 8 如何获取安全的 undefined 值? 9 说几条写 JavaScript 的基本规范? 10 JavaScript 原型,原型链? 有什么特点? 11 js 获取原型的方法? 12 在 js 中不同进制数字的表示方式? 13 js 中整数的安全范围是多少? 14 typeof NaN 的结果是什么? 15 isNaN 和 Number.isNaN 函数的区别? 16 Array 构造函数只有一个参数值时的表现? 17 其他值到字符串的转换规则? 18 其他值到数字值的转换规则? 19 其他值到布尔类型的值的转换规则? 20 {} 和 [] 的 valueOf 和 toString 的结果是什么? 21 什么是假值对象? 22 ~ 操作符的作用? 23 解析字符串中的数字和将字符串强制类型转换为数字的返回结果都是数字,它们之间的区别是什么? 24 + 操作符什么时候用于字符串的拼接? 25 什么情况下会发生布尔值的隐式强制类型转换? 26 || 和 && 操作符的返回值? 27 Symbol 值的强制类型转换? 28 == 操作符的强制类型转换规则? 29 如何将字符串转化为数字,例如 '12.3b'? 30 如何将浮点数点左边的数每三位添加一个逗号,如 12000000.11 转化为『12,000,000.11』? 31 常用正则表达式? 32 生成随机数的各种方法? 33 如何实现数组的随机排序? 34 javascript 创建对象的几种方式? 35 JavaScript 继承的几种实现方式? 36 寄生式组合继承的实现? 37 Javascript 的作用域链? 38 谈谈 This 对象的理解。 39 eval 是做什么的? 40 什么是 DOM 和 BOM? 41 写一个通用的事件侦听器函数。 42 事件是什么?IE 与火狐的事件机制有什么区别? 如何阻止冒泡? 43 三种事件模型是什么? 44 事件委托是什么? 45 ['1', '2', '3'].map(parseInt) 答案是多少? 46 什么是闭包,为什么要用它? 47 javascript 代码中的 'use strict'; 是什么意思 ? 使用它区别是什么? 48 如何判断一个对象是否属于某个类? 49 instanceof 的作用? 50 new 操作符具体干了什么呢?如何实现? 51 Javascript 中,有一个函数,执行时对象查找时,永远不会去查找原型,这个函数是? 52 对于 JSON 的了解? 53 [].forEach.call($$(''),function(a){a.style.outline='1px solid #'+(~~(Math.random()(1<<24))).toString(16)}) 能解释一下这段代码的意思吗? 54 js 延迟加载的方式有哪些? 55 Ajax 是什么? 如何创建一个 Ajax? 56 谈一谈浏览器的缓存机制? 57 Ajax 解决浏览器缓存问题? 58 同步和异步的区别? 59 什么是浏览器的同源政策? 60 如何解决跨域问题? 61 服务器代理转发时,该如何处理 cookie? 62 简单谈一下 cookie ? 63 模块化开发怎么做? 64 js 的几种模块规范? 65 AMD 和 CMD 规范的区别? 66 ES6 模块与 CommonJS 模块、AMD、CMD 的差异。 67 requireJS 的核心原理是什么?(如何动态加载的?如何避免多次加载的?如何 缓存的?) 68 JS 模块加载器的轮子怎么造,也就是如何实现一个模块加载器? 69 ECMAScript6 怎么写 class,为什么会出现 class 这种东西? 70 documen.write 和 innerHTML 的区别? 71 DOM 操作——怎样添加、移除、移动、复制、创建和查找节点? 72 innerHTML 与 outerHTML 的区别? 73 .call() 和 .apply() 的区别? 74 JavaScript 类数组对象的定义? 75 数组和对象有哪些原生方法,列举一下? 76 数组的 fill 方法? 77 [,,,] 的长度? 78 JavaScript 中的作用域与变量声明提升? 79 如何编写高性能的 Javascript ? 80 简单介绍一下 V8 引擎的垃圾回收机制 81 哪些操作会造成内存泄漏? 82 需求:实现一个页面操作不会整页刷新的网站,并且能在浏览器前进、后退时正确响应。给出你的技术实现方案? 83 如何判断当前脚本运行在浏览器还是 node 环境中?(阿里) 84 把 script 标签放在页面的最底部的 body 封闭之前和封闭之后有什么区别?浏览器会如何解析它们? 85 移动端的点击事件的有延迟,时间是多久,为什么会有? 怎么解决这个延时? 86 什么是“前端路由”?什么时候适合使用“前端路由”?“前端路由”有哪些优点和缺点? 87 如何测试前端代码么? 知道 BDD, TDD, Unit Test 么? 知道怎么测试你的前端工程么(mocha, sinon, jasmin, qUnit..)? 88 检测浏览器版本版本有哪些方式? 89 什么是 Polyfill ? 90 使用 JS 实现获取文件扩展名? 91 介绍一下 js 的节流与防抖? 92 Object.is() 与原来的比较操作符 '==='、'==' 的区别? 93 escape,encodeURI,encodeURIComponent 有什么区别? 94 Unicode 和 UTF-8 之间的关系? 95 js 的事件循环是什么? 96 js 中的深浅拷贝实现? 97 手写 call、apply 及 bind 函数 98 函数柯里化的实现 99 99. 为什么 0.1 + 0.2 != 0.3?如何解决这个问题? 100 原码、反码和补码的介绍 101 toPrecision 和 toFixed 和 Math.round 的区别? 102 什么是 XSS 攻击?如何防范 XSS 攻击? 103 什么是 CSP? 104 什么是 CSRF 攻击?如何防范 CSRF 攻击? 105 什么是 Samesite Cookie 属性? 106 什么是点击劫持?如何防范点击劫持? 107 SQL 注入攻击? 108 什么是 MVVM?比之 MVC 有什么区别?什么又是 MVP ? 109 vue 双向数据绑定原理? 110 Object.defineProperty 介绍? 111 使用 Object.defineProperty() 来进行数据劫持有什么缺点? 112 什么是 Virtual DOM?为什么 Virtual DOM 比原生 DOM 快? 113 如何比较两个 DOM 树的差异? 114 什么是 requestAnimationFrame ? 115 谈谈你对 webpack 的看法 116 offsetWidth/offsetHeight,clientWidth/clientHeight 与 scrollWidth/scrollHeight 的区别? 117 谈一谈你理解的函数式编程? 118 异步编程的实现方式? 119 Js 动画与 CSS 动画区别及相应实现 120 get 请求传参长度的误区 121 URL 和 URI 的区别? 122 get 和 post 请求在缓存方面的区别 123 图片的懒加载和预加载 124 mouseover 和 mouseenter 的区别? 125 js 拖拽功能的实现 126 为什么使用 setTimeout 实现 setInterval?怎么模拟? 127 let 和 const 的注意点? 128 什么是 rest 参数? 129 什么是尾调用,使用尾调用有什么好处? 130 Symbol 类型的注意点? 131 Set 和 WeakSet 结构? 132 Map 和 WeakMap 结构? 133 什么是 Proxy ? 134 Reflect 对象创建目的? 135 require 模块引入的查找方式? 136 什么是 Promise 对象,什么是 Promises/A+ 规范? 137 手写一个 Promise 138 如何检测浏览器所支持的最小字体大小? 139 怎么做 JS 代码 Error 统计? 140 单例模式模式是什么? 141 策略模式是什么? 142 代理模式是什么? 143 中介者模式是什么? 144 适配器模式是什么? 145 观察者模式和发布订阅模式有什么不同? 146 Vue 的生命周期是什么? 147 Vue 的各个生命阶段是什么? 148 Vue 组件间的参数传递方式? 149 computed 和 watch 的差异? 150 vue-router 中的导航钩子函数 151 两个router 的区别? 152 vue 常用的修饰符? 153 computed 和 watch 区别? 154 keep-alive 组件有什么作用? 155 vue 中 mixin 和 mixins 区别? 156 开发中常用的几种 Content-Type ? 157 如何封装一个 javascript 的类型判断函数? 158 如何判断一个对象是否为空对象? 159 使用闭包实现每隔一秒打印 1,2,3,4 160 手写一个 jsonp 161 手写一个观察者模式? 162 EventEmitter 实现 163 一道常被人轻视的前端 JS 面试题 164 如何确定页面的可用性时间,什么是 Performance API? 165 js 中的命名规则 166 js 语句末尾分号是否可以省略? 167 Object.assign() 168 Math.ceil 和 Math.floor 169 js for 循环注意点 170 一个列表,假设有 100000 个数据,这个该怎么办? 171 js 中倒计时的纠偏实现? 172 进程间通信的方式? 173 如何查找一篇英文文章中出现频率最高的单词? 174 174道 JavaScript 面试题,合集

剑曼红尘 2020-04-02 14:05:35 0 浏览量 回答数 0

问题

程序员报错QA大分享(1)

问问小秘 2020-06-18 15:46:14 8 浏览量 回答数 1

问题

Vue面试题汇总【精品问答】

问问小秘 2020-05-25 18:02:28 7911 浏览量 回答数 2

问题

如何优化网站的访问速度

cnsjw 2019-12-01 21:00:50 29372 浏览量 回答数 35
阿里云大学 云服务器ECS com域名 网站域名whois查询 开发者平台 小程序定制 小程序开发 国内短信套餐包 开发者技术与产品 云数据库 图像识别 开发者问答 阿里云建站 阿里云备案 云市场 万网 阿里云帮助文档 免费套餐 开发者工具 云栖号物联网 小程序开发制作 视频内容分析 企业网站制作 视频集锦 代理记账服务 2020阿里巴巴研发效能峰会 企业建站模板 云效成长地图 高端建站 云栖号弹性计算 阿里云云栖号 云栖号案例 云栖号直播