首页
学习
活动
专区
圈层
工具
发布

不使用回调函数的ajax请求实现(async和await简化回调函数嵌套)

然而, 因为web程序本身特质的原因,这种问题是避无可避的,程序依赖于http响应的结果和保证自身的迅速响应两者之间是存在矛盾的, 肯定无法兼顾。...以最简单的前端ajax请求为例 代码先输出1,再输出2,整个程序执行流程并未因http请求而被阻塞,回调函数方案完美的把问题解决。 然而,这只是最简单回调函数示例,假如回调函数嵌套了许多层呢?...先把上面用JavaScript实现的多层嵌套回调用同步的方式来改写, 代码如下 代码由ajax和run这两个函数组成, ajax是对jquery ajax的封装,使之能不使用回调函数就能获得ajax的响应结果...因为没辙啊, 试想一下,ajax的回调函数中使用return语句, 意义何在?因此也只能变向的通过Promise将返回值扔给外部的调用者。...有一点需要注意, 假如需要在函数中使用await调用,那么这个函数也必须被声明为async类型, 否则编译出错, 程序无法正常运行。

3.7K50
  • 您找到你想要的搜索结果了吗?
    是的
    没有找到

    全面分析前端的网络请求方式

    的替代者 axios、request等众多开源库 三、关于网络请求的疑问 Ajax的出现解决了什么问题 原生 Ajax如何使用 jQuery的网络请求方式 fetch的用法以及坑点 如何正确的使用 fetch...abort 用于终止一个 ajax请求,调用此方法后 readyState将被设置为 0,用法: xhr.abort() setRequestHeader 用于设置 HTTP请求头,此方法必须在 open...六、jQuery对Ajax的封装 在很长一段时间里,人们使用 jQuery提供的 ajax封装进行网络请求,包括 $.ajax、$.get、$.post等,这几个方法放到现在,我依然觉得很实用。...使用 JSONP 形式调用函数时,如 "myurl?callback=?" jQuery 将自动替换 ? 为正确的函数名,以执行回调函数。"...然后我发现这里polyfill的实现和MDN-使用Fetch以及很多资料是不一致的: mdn: 默认情况下,fetch 不会从服务端发送或接收任何 cookies 于是我分别实验了下使用 polyfill

    2.6K40

    .$.ajaxSetup方法设置AJAX的全局默认设置

    前言 $.ajaxSetup方法用于设置AJAX的全局默认设置。之后执行的所有AJAX请求,如果对应的选项参数没有设置,将使用更改后的默认设置。 这方便我们设置error 统一返回样式。...type: "POST" , // 默认使用POST方式 contentType: "application/json", data:{ "name":"yo...} , error: function(jqXHR, textStatus, errorMsg){ // 出错时默认的处理函数 // jqXHR 是经过jQuery...发一个请求,参数都不传 // ajax请求, 什么也不传,拿默认设置 $.ajax(); 此时会用默认的配置发post请求,访问/login 地址 可以传url和type 参数改变默认值 $.ajax(...( '操作异常:' + errorMsg ); } }); // ajax请求 $.ajax({ url: "/demo", // 设置参数改变默认值

    1.5K30

    jQuery深入——动画、常用工具、JSON、Ajax

    ]) properties 最终的CSS样式 二、jQuery常用工具 0x1 和其他库一起使用 jQuery.noConflict(jqueryPropertyToo) - noConflict()...是一种更便捷的获取数据方式 3、创建一个 AJAX 请求 第一步 创建 XMLHTTPRequest 对象 创建一个 XMLHTTPRequest(XHR) 对象 使用 XHR 对象的方法向服务器发送请求...abort 方法 舍弃一个请求 readyState 会被置 0 但不触发 readystatechange 事件 请求还是会送到服务器,仅仅是客户端“视而不见” setRequestHeader...时为必须 Access-Control-Max-Age 服务端响应头字段设置 表示缓存预检结果 以秒为单位 在此期间不再发送预检请求 0x2 jQuery中的ajax方法 1、全局配置 $.ajaxSetup...可通过配置参数关闭单个 ajax 方法不执行全局回调 全局回调无法被 ajax 方法中的配置项覆盖 0x3 JSON 1、数据格式 JSON 全称 JavaScript Object Notation

    1.9K10

    AJAX请求重复发送问题

    异步代码执行不完整:如果在 AJAX 请求的回调函数中执行了异步代码(例如,定时器),而该异步代码的执行时间超过了请求的响应时间,那么在异步代码执行期间可能会触发新的 AJAX 请求。...网络延迟和响应时间:在网络延迟较高或服务器响应时间较长的情况下,客户端可能会在等待响应期间发送新的 AJAX 请求。...取消之前的请求:在发送新的 AJAX 请求之前,可以先取消之前的请求,以确保只有最新的请求会被发送。可以使用 abort() 方法来取消正在进行的 AJAX 请求。...} });});在上述示例中,我们使用 jQuery 的 $.ajax() 方法发送一个 GET 请求到 example.php URL。...我们通过检查 xhr 对象的值来判断当前是否有请求正在进行中。如果有,我们使用 abort() 方法取消之前的请求。然后,我们发送新的 AJAX 请求,并在成功或失败的回调函数中清空 xhr 对象。

    1.8K20

    如何在 Web 关闭页面时发送 Ajax 请求

    然后对监听函数做处理,让关闭事件只调用一次。 2. 请求发送 有了上面的监听,事情只完成了一半,如果我们在监听中直接发送ajax请求,就会发现请求被浏览器abort了,无法发送出去。...方案2:发送异步请求,并且在服务端忽略ajax的abort 虽然异步请求会被浏览器abort,但是如果服务端可以忽略abort,仍然正常执行,也是可以的。...比如PHP有ignore_user_abort函数可以忽略abort。这样需要改造后台,一般不太可行.....下面是几种使用sendBeacon发送请求的方式,可以修改header和内容的格式,因为一般和服务器的通信方式都是固定的,如果修改了header或者内容,服务器就无法正常识别出来了。...(1)使用Blob来发送 使用blob发送的好处是可以自己定义内容的格式和header。

    4.2K30

    AJAX常见面试问题

    大家好,又见面了,我是你们的朋友全栈君 1.工作当中会和后台交互吗? 那你能说说封装好的 ajax里的几个参数吗 ? url: 发送请求的地址。...使用JSONP形式调用函数时,例如myurl?callback=?,JQuery将自动替换后一个“?”为正确的函数名,以执行回调函数。 text:返回纯文本字符串。...8.angularjs和JQ的区别 JQ 先获取再使用。 Angularjs 直接使用 9.JQmobile和JQ的区别 jQuery Mobile 是创建移动 web 应用程序的框架。...jQuery Mobile 使用 HTML5 和 CSS3 通过尽可能少的脚本对页面进行布局 (1) jQuery是一个js库,主要提供的功能是选择器,属性修改和事件绑定等等。...缺点: .AJAX干掉了Back和History功能,即对浏览器机制的破坏。 在动态更新页面的情况下,用户无法回到前一个页面状态,因为浏览器仅能记忆历史记录中的静态页面。

    3K20

    无内鬼 整点AJAX

    ​ 目录 一、AJAX技术简介 特点 二、AJAX书写步骤 三、响应处理和响应流程 四、使用ajax发送get请求 五、使用ajax发送post请求 六、方法抽取(了解) 七、jQuery 中 ajax...方法使用 八、使用 jQuery 发送 GET 方式 AJAX 请求 8.1、使用.ajax()方法 8.2、使用.get()方法 九、使用 jQuery 发送 POST 方式 AJAX 请求 9.1...,即对服务响应回浏览器的数据根据状态码和 AJAX 对象的状态信息进行不同的处理,在绑定状态改变的处理函数中写对应的逻辑代码即可。...() { ajax.abort(); }, time); } 七、jQuery 中 ajax 方法使用 async:默认设置下,所有请求均为异步请求。...}); 八、使用 jQuery 发送 GET 方式 AJAX 请求 8.1、使用.ajax()方法 $("#obtn").click(()=>{ $.ajax({ url:'/get_data

    5.8K50

    jQuery - Ajax详解分析(三)

    回调函数 如果要处理 $.ajax() 得到的数据,则需要使用回调函数:beforeSend、error、dataFilter、success、complete。...beforeSend 在发送请求之前调用,并且传入一个 XMLHttpRequest 作为参数。 error 在请求出错时调用。...并且必须返回新的数据(可能是处理过的)传递给 success 回调函数。 success 当请求之后调用。传入返回后的数据,以及包含成功代码的字符串。...complete 当请求完成之后调用这个函数,无论成功或失败。传入 XMLHttpRequest 对象,以及一个包含成功或错误代码的字符串。...这四个回调函数是官网推荐的,可以取代上面四个回调函数,详细看http://api.jquery.com/jQuery.ajax/ jqXHR对象的属性 readyState responseXML

    58200

    对于 fetch 和 axios 和 Ajax 区别 ?

    节省带宽:基于Ajax的应用程序使用较少的服务器带宽,因为无需重新加载完整的页面 底层使用XMLHttpRequest 拥有开源JavaScript库 : JQuery,Prototype,Scriptaculous...的浏览器无法使用该应用程序 由于安全限制,只能使用它来访问服务于初始页面的主机的信息。...如果需要显示来自其他服务器的信息,则无法在AJAX中显示。 2. axios axios 基于promise用于浏览器和node.js的http客户端。...Fetch的代码结构比起ajax简单多了,参数有点像jQuery ajax。但是,一定记住fetch不是ajax的进一步封装,而是原生js,没有使用XMLHttpRequest对象。...fetch默认不会带cookie,需要添加配置项 fetch不支持abort,不支持超时控制,使用setTimeout及Promise.reject和Promise.race结合setTimeout实现的超时控制并不能阻止请求过程继续在后台执行

    1.2K20

    加点JavaScript魔法

    jQuery JavaScript库作为Bootstrap的依赖项加载,因此我将利用它。当使用jQuery时,你可以用$(...)封装来注册一个函数,函数将会在页面加载完毕后运行。...如果在元素集合上调用这个函数,jQuery方便地将事件附加到所有元素上。这两个参数是两个函数,分别在用户将鼠标指针移入和移出目标元素时调用对应的函数。...当使用jQuery时,$.ajax()函数向服务器发送一个异步请求。...这个变量将保存我通过调用$.ajax()来初始化的异步请求对象。...同样的逻辑也需要应用于异步请求,所以我添加了第二个子句来放弃我的xhr请求对象(如果存在) 08 弹窗的创建与销毁 最后我使用在Ajax回调函数中传递给我的data参数来创建我的弹窗组件: app/templates

    5.7K10

    AJAX取消请求

    取消请求的方法在 AJAX 请求中,我们可以使用以下方法来取消正在进行的请求:使用 abort() 方法:使用 abort() 方法可以取消当前正在进行的 AJAX 请求。...:', error); }});// 取消请求xhr.abort();在上述示例中,我们使用 $.ajax() 方法发送一个 GET 请求到 example.php URL。...我们将 AJAX 请求的返回值保存在 xhr 变量中。要取消请求,我们只需调用 abort() 方法即可。注意事项只能取消当前正在进行的请求。...如果请求已经完成或已被取消,则 abort() 方法不会产生任何效果。调用 abort() 方法后,将触发 error 回调函数。...每次输入变化时,我们取消之前的请求(如果存在),然后使用 setTimeout() 延迟 300 毫秒发送新的请求。这样可以确保只有在用户停止输入一段时间后才发送请求,避免频繁的请求。

    2.9K20

    JQuery 封装 Ajax Post 请求示例

    // code for IE6, IE5 xmlHttp = new ActiveXObject("Microsoft.XMLHTTP"); } // 2.设置请求方式和请求地址...>在经过博主前几篇的文章过来之后,本文首先将介绍一下使用 jQuery 当中的 Ajax,说明,在看本文的 jquery 当中的 Ajax 需要导入 jQuery,官方文档地址:https://jquery.cuishifeng.cn...如上代码的特点,就是属性当中的位置可以任意改变,type 属性当中的 get 与 post 可以大小写都可以进行请求,看了如上 jQuery 当中的 ajax...方法之后然后我们再来看看我们自己封装的 ajax 试着与 jQuery 当中的 ajax 的特点去试着发送请求看一下,导入我们自己的 ajax 方法:我正在参与2023腾讯技术创作特训营第二期有奖征文,瓜分万元奖池和键盘手表

    1.1K00

    不只是离线缓存! - 论如何善用ServiceWorker

    经过两天的完善,我终于写出了一套具有离线可达、绕备、优选CDN、跟踪统计合一的SW脚本。此博客使用的SW 接下来我将从头开始讲述ServiceWorker的妙用。...const handle = async(req)=>{ return fetch(req) } fetch这个函数相当于前端的ajax或者XMLHTTPRequest,作用是发起一个请求,获得一个返回值...由于sw不可访问window,在sw中是无法使用ajax或XMLHTTPRequest。同时,fetch是一个异步函数,直接调用它会返回一个Promise。...,它就立刻把Response丢给了下一个管道函数,而此时status正确,abort打断了包括这一个fetch的所有请求,fetch就直接工作不正常。...因此,如果想要使用持久化存储,我们只能使用CacheAPI和IndexdDB。

    4.3K21

    Web前端JQuery面试题(三)

    unbind()可以移除元素的绑定事件:unbind([type], [fn]) 移除全部事件 unbind(); 8.one()方法和trigger()方法的使用?...fadeTo()实现指定的透明度的效果 toggle()方法进行切换效果,显示和隐藏 slideToggle()方法可以上下显示和隐藏的效果 animate()方法进行自定义元素的动画 15.使用animate...$.ajax([options]); $.ajaxSetup([options]); ajaxSuccess(callback) ajax请求成功时执行 ajaxStop(callback) ajax请求结束时执行...ajaxStart(callback) ajax请求开始时执行 ajaxComplete(callback) ajax请求完成时执行函数 ajaxError(callback) ajax请求发送错误时执行函数...ajaxSend(callback) ajax请求发送前执行函数 结言 好了,欢迎在留言区留言,与大家分享你的经验和心得。

    3.6K21

    jQuery ajax - ajax() 方法jQuery ajax - ajax() 方法

    使用 JSONP 形式调用函数时,如 "myurl?callback=?" jQuery 将自动替换 ? 为正确的函数名,以执行回调函数。...这主要用来让 jQuery 生成度独特的函数名,这样管理请求更容易,也能方便地提供回调函数和错误处理。你也可以在想让浏览器缓存 GET 请求的时候,指定这个回调函数名。...通常只在本地和远程的内容编码不同时使用。 success 类型:Function 请求成功后的回调函数。...如果服务器需要 HTTP 认证,可以使用用户名和密码可以通过 username 和 password 选项来设置。 Ajax 请求是限时的,所以错误警告被捕获并处理后,可以用来提升用户体验。...比如说,调用对象上的 .abort() 可以在请求完成前挂起请求。

    16.9K30
    领券