分享5个顶级的JavaScript Ajax组件库


Posted in Javascript onSeptember 16, 2018

AJAX是用来对服务器进行异步HTTP调用的一系列web开发技术客户端框架。 AJAX即Asynchronous JavaScript and XML(异步JavaScript和XML)。AJAX曾是web开发界的一个常见名称,许多流行的JavaScript小部件都是使用AJAX构建的。例如,有些特定的用户交互(如按下按钮)会异步调用到服务器,服务器会检索数据并将其返回给客户端——所有这些都不需要重新加载网页。

AJAX的现代化重新引入

JavaScript已经进化了,现在我们使用前端库和/或如React、Angular、Vue等框架构建了动态的网站。AJAX的概念也经历了重大变化,因为现代异步JavaScript调用涉及检索JSON而不是XML。有很多库允许你从客户端应用程序对服务器进行异步调用。有些进入到浏览器标准,有些则有很大的用户基础,因为它们不但灵活而且易于使用。有些支持promises,有些则使用回调。在本文中,我将介绍用于从服务器获取数据的前5个AJAX库。

Fetch API

Fetch API是XMLHttpRequest的现代替代品,用于从服务器检索资源。与XMLHttpRequest不同的是,它具有更强大的功能集和更有意义的命名。基于其语法和结构,Fetch不但灵活而且易于使用。但是,与其他AJAX HTTP库区别开来的是,它具有所有现代Web浏览器的支持。Fetch遵循请求-响应的方法,也就是说,Fetch提出请求并返回解析到Response对象的promise。

你可以传递Request对象来获取,或者,也可以仅传递要获取的资源的URL。下面的示例演示了使用Fetch创建简单的GET请求。

fetch('https://www.example.com', {
    method: 'get'
  })
  .then(response => response.json())
  .then(jsonData => console.log(jsonData))
  .catch(err => {      //error block
   })

正如你所看到的,Fetch的then方法返回了一个响应对象,你可以使用一系列的then 进行进一步的操作。我使用.json() 方法将响应转换为JSON并将其输出到控制台。

假如你需要POST表单数据或使用Fetch创建AJAX文件上传,将会怎么样?此时,除了Fetch之外,你还需要一个输入表单,并使用FormData库来存储表单对象。

var input = document.querySelector('input[type="file"]')var data = new FormData()
data.append('file', input.files[0])
data.append('user', 'blizzerand')
fetch('/avatars', {
  method: 'POST',
  body: data
})

你可以在官方的Mozilla web文档中阅读更多关于Fetch API的信息。

Axios

Axios是一个基于XMLHttpRequest而构建的现代JavaScript库,用于进行AJAX调用。它允许你从浏览器和服务器发出HTTP请求。此外,它还支持ES6原生的Promise API。Axios的其他突出特点包括:

拦截请求和响应。

使用promise转换请求和响应数据。

自动转换JSON数据。

取消实时请求。

要使用Axios,你需要先安装它。

npm install axios

下面是一个演示Axios行动的基本例子。

// Make a request for a user with a given IDaxios.get('/user?ID=12345')
 .then(function (response) {  console.log(response);
 })
 .catch(function (error) {  console.log(error);
 });

与Fetch相比,Axios的语法更简单。让我们做一些更复杂的事情,比如我们之前使用Fetch创建的AJAX文件上传器。

var data = new FormData();
  data.append('foo', 'bar');
  data.append('file', document.getElementById('file').files[0]);  var config = {
    onUploadProgress: function(progressEvent) {     var percentCompleted = Math.round( (progressEvent.loaded * 100) / progressEvent.total );
    }
  };
  axios.put('/upload/server', data, config)
   .then(function (res) {
    output.className = 'container';
    output.innerHTML = res.data;
   })
   .catch(function (err) {
    output.className = 'container text-danger';
    output.innerHTML = err.message;
   });

Axios更具可读性。Axios也非常受React和Vue等现代库的欢迎。

jQuery

jQuery曾经是JavaScript中的一个前线库,用于处理从AJAX调用到操纵DOM内容的所有事情。虽然随着其他前端库的“冲击”,其相关性有所降低,但你仍然可以使用jQuery来进行异步调用。

如果你之前使用过jQuery,那么这可能是最简单的解决方案。但是,你将不得不导入整个jQuery库以使用$.ajax方法。虽然这个库有特定于域的方法,例如$.getJSON,$.get和$.post,但是其语法并不像其他的AJAX库那么简单。以下代码用于编写基本的GET请求。

$.ajax({
 url: '/users',
 type: "GET",
 dataType: "json",
 success: function (data) {   console.log(data);
 }
 fail: function () {   console.log("Encountered an error")
 }
});

jQuery好的地方在于,如果你有疑问,那么你可以找到大量的支持和文档。我发现了很多使用FormData()和jQuery进行AJAX文件上传的例子。下面是最简单的方法:

var formData = new FormData();
formData.append('file', $('#file')[0].files[0]);
$.ajax({
    url : 'upload.php',
    type : 'POST',
    data : formData,
    processData: false, // tell jQuery not to process the data
    contentType: false, // tell jQuery not to set contentType
    success : function(data) {      console.log(data);
      alert(data);
    }
});

SuperAgent

SuperAgent是一个轻量级和渐进式的AJAX库,更侧重于可读性和灵活性。SuperAgent还拥有一个温和的学习曲线,不像其他库。它有一个针对Node.js API相同的模块。SuperAgent有一个接受GET、POST、PUT、DELETE和HEAD等方法的请求对象。然后你可以调用.then(),.end()或新的.await()方法来处理响应。例如,以下代码为使用SuperAgent的简单GET请求。

request
  .post('/api/pet')
  .send({ name: 'Manny', species: 'cat' })
  .set('X-API-Key', 'foobar')
  .set('Accept', 'application/json')
  .then(function(res) {
   alert('yay got ' + JSON.stringify(res.body));
  });

如果你想要做更多的事情,比如使用此AJAX库上传文件,那该怎么做呢? 同样超级easy。

request
  .post('/upload')
  .field('user[name]', 'Tobi')
  .field('user[email]', 'tobi@learnboost.com')
  .field('friends[]', ['loki', 'jane'])
  .attach('image', 'path/to/tobi.png')
  .then(callback);

如果你有兴趣了解更多关于SuperAgent的信息,那么它们有一系列很不错的文档来帮助你开始这个旅程。

Request——简化的HTTP客户端

Request库是进行HTTP调用最简单的方法之一。结构和语法与在Node.js中处理请求的方式非常相似。目前,该项目在GitHub上有18K个星,值得一提的是,它是可用的最流行的HTTP库之一。 下面是一个例子:

var request = require('request');
request('http://www.google.com', function (error, response, body) {
 console.log('error:', error); // Print the error if one occurred
 console.log('statusCode:', response && response.statusCode); // Print the response status code if a response was received
 console.log('body:', body); // Print the HTML for the Google homepage.
});

个人最喜欢的是Axios,因为它更易读更赏心悦目。你也可以忠于Fetch,因为它文档化良好且有标准化的解决方案。

当然还有其它一些不错的Ajax组件库,在以后的文章中我们会继续为大家分享

Javascript 相关文章推荐
JavaScript 开发规范要求(图文并茂)
Jun 11 Javascript
js每隔5分钟执行一次ajax请求的实现方法
Nov 27 Javascript
详解JavaScript中的表单验证
Jun 16 Javascript
常用jQuery代码分享
Jul 14 Javascript
Node.js操作mysql数据库增删改查
Mar 30 Javascript
AngularJS中的Promise详细介绍及实例代码
Dec 13 Javascript
vuejs父子组件通信的问题
Jan 11 Javascript
JavaScript算法教程之sku(库存量单位)详解
Jun 29 Javascript
Vue 让元素抖动/摆动起来的实现代码
May 31 Javascript
原生javascript实现类似vue的数据绑定功能示例【观察者模式】
Feb 24 Javascript
微信小程序淘宝首页双排图片布局排版代码(推荐)
Oct 29 Javascript
react-native 实现购物车滑动删除效果的示例代码
Jan 15 Javascript
vuex + axios 做登录验证 并且保存登录状态的实例
Sep 16 #Javascript
vue主动刷新页面及列表数据删除后的刷新实例
Sep 16 #Javascript
vue将毫秒数转化为正常日期格式的实例
Sep 16 #Javascript
Vue filter格式化时间戳时间成标准日期格式的方法
Sep 16 #Javascript
vue 2.1.3 实时显示当前时间,每秒更新的方法
Sep 16 #Javascript
vue debug 二种方法
Sep 16 #Javascript
Vue刷新修改页面中数据的方法
Sep 16 #Javascript
You might like
php2html php生成静态页函数
2008/12/08 PHP
php抽象方法和抽象类实例分析
2016/12/07 PHP
JavaScript 继承详解(二)
2009/07/13 Javascript
Javascript中正则表达式的全局匹配模式分析
2011/04/26 Javascript
JS时间选择器 兼容IE6,7,8,9
2012/06/26 Javascript
基于JQuery的类似新浪微博展示信息效果的代码
2012/07/23 Javascript
Node.js开发之访问Redis数据库教程
2015/01/14 Javascript
angularJS 中$scope方法使用指南
2015/02/09 Javascript
javascript操作符"!~"详解
2015/02/10 Javascript
JS实现同一个网页布局滑动门和TAB选项卡实例
2015/09/23 Javascript
Bootstrap每天必学之媒体对象
2015/11/30 Javascript
javascript实现tab响应式切换特效
2016/01/29 Javascript
js随机生成一个验证码
2017/06/01 Javascript
Angular.js中上传指令ng-upload的基本使用教程
2017/07/30 Javascript
Angular4.x Event (DOM事件和自定义事件详解)
2018/10/09 Javascript
VUE实现图片验证码功能
2020/11/18 Javascript
js实现适配移动端的拖动效果
2020/01/13 Javascript
Node.js+Vue脚手架环境搭建的方法步骤
2020/03/08 Javascript
python 读写、创建 文件的方法(必看)
2016/09/12 Python
Python实现Linux的find命令实例分享
2017/06/04 Python
Python基于更相减损术实现求解最大公约数的方法
2018/04/04 Python
python 同时读取多个文件的例子
2019/07/16 Python
基于python3 的百度图片下载器的实现代码
2019/11/05 Python
pyinstaller打包找不到文件的问题解决
2020/04/15 Python
浅谈Selenium 控制浏览器的常用方法
2020/12/04 Python
CSS3 实现童年的纸飞机
2019/05/05 HTML / CSS
有关HTML5中背景音乐的自动播放功能
2017/10/16 HTML / CSS
苹果香港官方商城:Apple香港
2016/09/14 全球购物
Michael Kors香港官网:美国奢侈品品牌
2019/12/26 全球购物
主管会计岗位责任制
2014/02/10 职场文书
销售人员求职的自我评价分享
2014/03/15 职场文书
优秀员工推荐信
2014/05/10 职场文书
大学生活感想
2015/08/10 职场文书
2016年优秀团支部事迹材料
2016/02/26 职场文书
Golang 正则匹配效率详解
2021/04/25 Golang
nginx部署多前端项目的几种方法
2021/05/25 Servers