ajax封装调用方法
很多同学在进行编程学习时缺乏系统学习的资料。本页面基于ajax封装调用方法内容,从基础理论到综合实战,通过实用的知识类文章,标准的编程教程,丰富的视频课程,为您在ajax封装调用方法相关知识领域提供全面立体的资料补充。同时还包含 android、a href、abap 的知识内容,欢迎查阅!
ajax封装调用方法相关知识
-
php ajax封装包及调用方法// JavaScript Document//ajax 封装包function ajax(json){ var type = json.type; //一般都是get var url = json.url; //一般都在后面加上一个随机字符,防止缓存 var success = json.success; //变量函数 //创建ajax对象 var oAjax; //考虑兼容性 if(window.XMLHtt
-
原生javascript封装ajax原文见martin的博客最近重新看《javascript高级程序设计》,突然看到了ajax,想起来之前学习的各种坑,又想着结合最近学习的模块化编程、面向对象式编程,所以用原生的js采用面向对象的设计思路对ajax进行了一个封装,同时,想起之前学习ajax的最大困难:没有服务器端代码,不好测试,所以这次用原生node写了一个简单的服务器,用于处理ajax的测试。综上,本文主要提供了以下几个点:采用面向对象的方法用原生js封装了一个ajax类,更便捷的实现ajax通信提供了一个Node写的服务器端的代码,可以用来测试ajax提供了一个demo,服务器端以及浏览器端的代码来测试ajax类仓库在这里,服务器,客户端的代码都在里面,也有一些测试的说明。ajax实现原理ajax是一项伟大的技术,其很好的解决了传统浏览器一言不合就重新发送整个页面,速度慢,用户体验差的问题。它是一个获取资源的手段,可以在不进行整体刷新的情况下进行局部dom修改,速度快,用户体验好。实现的原理主要是基于一个类,XMLHttpRequest(
-
详谈ajax(原理、构造、封装......)说起ajax,大家都不陌生。但是由于目前很多框架或者库等都对网络请求做了封装,导致了很多初学者只知其然而不知其所以然。所以今天我们就详细了解一下ajax的实现原理和封装ajax的关键步骤。ajax的核心是XMLHttpRequest对象。首先我们先创建一个XMLHTTPRequest对象var xhr = new XMLHttpRequest();。注意:本文所提及的内容不兼容古老的IE,有想了解的同学自行查阅ActiveXObject相关内容。XMLHttpRequest在使用XMLHttpRequest对象的第一步,我们首先要调用open方法来初始化请求参数,xhr.open('get','/test',true),虽然名字叫open,但是此时请求还并没有发送。open(method, url[, async, username, password])method:请求类型,例如GET,POST等url:请求地址(这里有同源限制,就是我们经常会看到的跨域问题啦)async
-
使用原生js封装ajax发布自Kindem的博客,欢迎大家转载,但是要注意注明出处前几天去腾讯面试Web前端开发工程师,被问到了这个问题,之前有看过这一方面的内容,但是时间过久了就只记得要使用XMLHttpRequest了,回头赶紧补一补。使用原生js封装ajaxexport class Ajax { static get(url, data, hook) { let xmlHttpRequest = new XMLHttpRequest(); url += '?'; &n
ajax封装调用方法相关课程
ajax封装调用方法相关教程
- 3. 封装 ajax 请求 ajax 是前端用于发送接口请求的技术,它是异步的,需要等待结果返回后执行在发送 ajax 请求时,我们可能会这样去写。ajax({ url: '', method: '', data: {}, params: {}, success: function (res) {}, error: function (err) {}})url: 接口请求地址;method: 接口请求方法,如:get、post 等;data: 请求时使用 body 传输的数据,一般用于 post 请求中;params: 请求时使用 url 传递的数据,一般用于 get 请求中;success: 接口请求成功时的回调,参数为接口成功的返回值;error: 接口请求失败时的回调,参数为抛出异常时的调用栈等信息。XMLHttpRequest 是浏览器提供的对象,用于进行后台与服务端的数据进行交互
- 3.$.ajax 事实上, load 属于基于 $.ajax 再次封装的一个简易的 API 。有兴趣的同学可以去扣一下源码来看看。大概实现就是这样:jQuery.fn.load = function( url, params, callback ) { var selector, type, response, self = this, off = url.indexOf( " " ); // xxx // If we have elements to modify, make the request if ( self.length > 0 ) { jQuery.ajax( { // xxx } ).done( function( responseText ) { // xxx } ).always( callback && function( jqXHR, status ) { // xxx } ); } return this;};这里我隐去了一些具体实现,目的只是为了说明 load 内部的基本实现是怎么样的即可。对具体实现有兴趣的同学可以自行读一下源代码。事实上,load 的定制化相对较高,必定无法满足更为灵活的需求。因此,我们多数时候会使用 jQuery 封装好的更为底层的 API —— $.ajax。
- 2. 回调地狱 我们都知道 JavaScript 异步使用的是回调函数,下面我们来看一个 ajax 请求的实例,下面的 ajax 方法是一个伪代码,可以看作是请求接口的方法,接口请求的库可以参考 jQuery 的 $.ajax 和 axios。// ajax请求的伪代码function ajax(url, sucessCallback, failCallback) { // url:请求的url // sucessCallback:成功的回调函数 // failCallback:失败的回调函数}ajax(url1, (res1) => { ajax(url2, (res2) => { ajax(url3, (res3) => { doSomething(res1, res2, res3) }) })})上面的 ajax 请求我们可以理解为,在调用 doSomething 方法时需要前面三个请求的结果作为参数,所以只有前一个 ajax 请求得到结果后才能发起第二个请求。这样前后有依赖的嵌套被称为回调地狱。对于比较复杂逻辑的情况来说,回调地狱会使程序出问题的概率大大增加。另外,这样做有个很严重的问题,就是接口请求的时间是三个请求的和,不能进行并发操作,当然我们也可以做一些优化操作,如下:let out = after(3, function (data){ doSomething(...data)})ajax(url1, (res1) => { out(res1)})ajax(url2, (res2) => { out(res2)})ajax(url3, (res3) => { out(res3)})function after(times, callback) { const arr = []; return function (value){ arr.push(value); if (--times==0) { callback(arr); } }}上面的代码很优雅地解决了回调嵌套的问题,但同时我们需要手动维护一个计数器来控制最后的回调。这无疑增加了程序的复杂度,我们更希望的是关注我的业务,而不是写更多的逻辑来优化。针对这种情况,社区提供了很多这类优化的库,而 Promise 则是其中最亮眼的。对上面的情况,Promise 怎么解决的呢?看如下的实现方式:function request(url) { return new Promise((resolve, reject) => { ajax(url, (res) => { resolve(res) }) })}Promise.all([request(url1), request(url1), request(url1)]).then((result) => { doSomething(...result)}).catch((error) => { console.log(error)})上面的代码中我们封装了一个 request 请求的方法,通过 Promise.all() 来并发请求这些接口,当接口都正确返回才会执行 then 方法中的回调,有一个错误都会抛出异常。这种方式比较好的是,我们对请求进行了封装,不要再关注每一步请求是否完成做对应的逻辑处理,让我们在开发过程中更加关注业务逻辑,使开发效率更快。
- 2. 为什么需要封装 封装具有以下优点:封装有利于提高类的内聚性,适当的封装可以让代码更容易理解与维护;良好的封装有利于降低代码的耦合度;一些关键属性只允许类内部可以访问和修改,增强类的安全性;隐藏实现细节,为调用方提供易于理解的接口;当需求发生变动时,我们只需要修改我们封装的代码,而不需要到处修改调用处的代码。
- 4. axios 库封装 在真实的项目中会经常使用到 axios 这样的 ajax 请求的库,虽然可以直接使用,但是往往业务中会有很多接口请求的地方,而这么多的请求有些固定不变的,每个接口在请求时都需要,如:token,baseURL,timeout 等等,针对这样的场景,我们可以对 axios 库进行二次业务封装。对于接口不同的返回结果我们希望有一个全局的提示框,这里我们使用 element-ui 组件库搭配使用。封装后的代码如下:import axios from 'axios';import { baseURL } from '@/config'class Http { constructor(baseUrl) { this.baseURL = baseURL; this.timeout = 3000; } setInterceptor(instance) { instance.interceptors.request.use(config => { return config; }); instance.interceptors.response.use(res => { if (res.status == 200) { return Promise.resolve(res.data); } else { return Promise.reject(res); } }, err => { return Promise.reject(err); }); } mergeOptions(options) { return { baseURL: this.baseURL, timeout: this.timeout, ...options } } request(options) { const instance = axios.create(); const opts = this.mergeOptions(options); this.setInterceptor(instance); return instance(opts); } get(url, config = {}) { return this.request({ method: 'get', url: url, ...config }) } post(url, data) { return this.request({ method: 'post', url, data }) }}export default new Http;
- 4.$.ajax 和 deferred 在 jQuery 中,通常都会有一些耗时比较长的操作,我们是无法马上得到结果的。对于 $.ajax 而言,我们的请求往往都要依靠网络传输和服务端的处理。这时我们的一贯处理方式就是给定某个回调函数,当耗时操作结束返回数据以后,及时调用这个回调函数来进行进一步的处理。在 jQuery 1.5 版本之后就改变了这一点,deffered 在 jQuery 中诞生了!字面来看,defer 代表的是“延迟”的意思,这也对应着我们的延时操作。使用 deffered ,我们将改变使用回调函数的做法,转而使用的是链式调用。这其实也正是拥抱了 jQuery 的设计思想,使用过 jQuery 的同学都知道,jQuery 对节点的操作往往都会封装为一个 jQuery 的对象进行统一管理,而 deffered 也正是如此,会对延时操作做一个统一的管理,并且提供统一的编程接口,比如 done 和 fail。举个栗子,我们使用 $.ajax 来进行数据的请求,可以变体为:$.ajax({ url: '/jquery_ajax/get', method: 'GET', data: { a: '123', b: '234' }}).done(data => { console.log(data)}).fail(err => { console.log(err)})事实上在 deffered 出来之后,$.ajax 也开始返回一个 deffered 对象。细心的同学可以看到,这不是一个 promise 么?是的,可以这样说,但是也不尽然,jQuery 根据自己的需要实现了这样一个东西,它支持 promise 的一些规范,同时也支持自己的特权方法。我们在使用 deffered 的时候,很直观的可以看到,我们从回调函数的传统方式中解脱了出来。除此之外,由于 Promise 的反控制反转,使得我们的程序变得更加健壮,我们对结果操作更有掌控权。
ajax封装调用方法相关搜索
-
ajax
android
a href
abap
abap开发
abort
absolutelayout
abstractmethoderror
abstracttablemodel
accept
access
access教程
accordion
accumulate
acess
action
actionform
actionlistener
activity
addeventlistener