分享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 相关文章推荐
Mootools 1.2教程 函数
Sep 15 Javascript
jquery实现的元素的left增加N像素 鼠标移开会慢慢的移动到原来的位置
Mar 21 Javascript
QUnit jQuery的TDD框架
Nov 04 Javascript
JavaScript fontcolor方法入门实例(按照指定的颜色来显示字符串)
Oct 17 Javascript
js获取UserControl内容为拼html时提供方便
Nov 02 Javascript
jquery实现可关闭的倒计时广告特效代码
Sep 02 Javascript
实例解析jQuery工具函数
Dec 01 Javascript
在js代码拼接dom对象到页面上去的模板总结(必看)
Feb 14 Javascript
详解vue2路由vue-router配置(懒加载)
Apr 08 Javascript
vue+springmvc导出excel数据的实现代码
Jun 27 Javascript
Vue2实时监听表单变化的示例讲解
Aug 30 Javascript
Vue.js实现表格渲染的方法
Sep 07 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
php session 预定义数组
2009/03/16 PHP
jQuery+PHP+ajax实现微博加载更多内容列表功能
2014/06/27 PHP
php中文验证码实现方法
2015/06/18 PHP
46 个非常有用的 PHP 代码片段
2016/02/16 PHP
解析WordPress中控制用户登陆和判断用户登陆的PHP函数
2016/03/01 PHP
在Thinkphp中使用ajax实现无刷新分页的方法
2016/10/25 PHP
PHP基于mcript扩展实现对称加密功能示例
2019/02/21 PHP
jQuery DIV弹出效果实现代码
2009/07/03 Javascript
IE6,IE7,IE8下使用Javascript记录光标选中范围(已补全)
2011/08/28 Javascript
json的前台操作和后台操作实现代码
2012/01/20 Javascript
解决jquery1.9不支持browser对象的问题
2013/11/13 Javascript
js设置组合快捷键/tabindex功能的方法
2013/11/21 Javascript
Jquery获取当前城市的天气信息
2016/08/05 Javascript
AngularJS bootstrap启动详解及实例代码
2016/09/14 Javascript
详解Python中logging日志模块在多进程环境下的使用
2016/12/26 Javascript
ES6学习教程之块级作用域详解
2017/10/09 Javascript
浅谈vue 单文件探索
2018/09/05 Javascript
在create-react-app中使用sass的方法示例
2018/10/01 Javascript
vue 实现通过vuex 存储值 在不同界面使用
2019/11/11 Javascript
javascript实现的图片预览和上传功能示例【兼容IE 9】
2020/05/01 Javascript
[04:04]显微镜下的DOTA2第六期——电影级别的华丽团战
2014/06/20 DOTA
实例Python处理XML文件的方法
2015/08/31 Python
总结网络IO模型与select模型的Python实例讲解
2016/06/27 Python
python使用matplotlib库生成随机漫步图
2018/08/27 Python
python区块及区块链的开发详解
2019/07/03 Python
Python+Selenium+phantomjs实现网页模拟登录和截图功能(windows环境)
2019/12/11 Python
使用python matplotlib 画图导入到word中如何保证分辨率
2020/04/16 Python
基于Python实现2种反转链表方法代码实例
2020/07/06 Python
CSS3 animation ? steps 函数详解
2019/08/30 HTML / CSS
AmazeUI 加载进度条的实现示例
2020/08/20 HTML / CSS
亚洲颇具影响力的男性在线购物零售商:His
2019/11/24 全球购物
出纳岗位职责模板
2013/11/27 职场文书
报社实习生自荐信
2014/01/24 职场文书
大课间活动实施方案
2014/03/06 职场文书
Python使用psutil库对系统数据进行采集监控的方法
2021/08/23 Python
python使用shell脚本创建kafka连接器
2022/04/29 Python