整合营销服务商

电脑端+手机端+微信端=数据同步管理

免费咨询热线:

5 个顶级的 JavaScript Ajax 组件和

5 个顶级的 JavaScript Ajax 组件和库

这篇文章中,我们将介绍一些用于AJAX调用的最好的JS库,包括jQuery,Axios和Fetch。欢迎查看代码示例!

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 ID

axios.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.

});

结论

从客户端进行HTTP调用在十年前可不是一件容易的事。前端开发人员不得不依赖于难以使用和实现的XMLHttpRequest。现代的库和HTTP客户端使得用户交互、动画、异步文件上传等前端功能变得更加简单。

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

你个人最喜欢的AJAX库是哪个? 欢迎各位分享你的看法。

在所有主流的网站,基本上都用到了ajax技术,通过异步请求数据已经是一个很普及的实现方式。市面上主流的web前端框架也都有自己封装的ajax,而且都是大同小异的。也就是说,Ajax这个轮子已经是多的不能再多了,那为什么我们还要自己封装一个Ajax呢?

想要了解一个技术或者某个功能的实现原理,只有动手实践才能真正的了解。就如我在csdn上第一篇博客的博文描述。探索技术的路上本应该自己造轮子,即使市面上有再多的选择,自己动手尝试也是必要的,第一次尝试必然会问题众多,但你不觉得解决他是一件很有成就感的事情吗,这样才能带给你更大的进步和更深刻的领悟。

废话不说,先来写一个最基础的ajax:

[javascript] view plain copy

  1. function ajax(a){
  2. var ajax=new XMLHttpRequest();
  3. ajax.onreadystatechange=function(){
  4. if (ajax.readyState==4 && ajax.status==200) {
  5. a.success(JSON.stringify(ajax.responseText))
  6. }
  7. }
  8. ajax.open(a.method, a.url,true)
  9. ajax.send(a.data)
  10. }
  11. ajax({
  12. method:'get',
  13. url:'http://127.0.0.1:8081/test',
  14. success:function(res){
  15. console.log(res)
  16. }
  17. })

一个ajax出炉了,通过调用、填写参数即可请求到服务器。先来分析一下这个ajax的结构,可以看得出来,其实很简单,只是new了一个XMLHttpRequest对象,然后通过onreadystatechange方法来处理返回值,现在我们只是做了一个判断,当请求成功时就调用success方法,如果请求失败,我们还没有写上去,后面我们慢慢完善这个ajax的逻辑。

然后调用ajax的open方法,open方法里有三个参数,第一个是请求方式(如:get或post),第二个是请求的url地址,第三个是一个bool值,是否要异步请求。

最后使用send方法带上参数发送请求即可。

这是,我的服务器已经收到一个请求,但他报了404错误,也就是找不到对应的页面或路由,这时success方法也不会被调用执行。

那我们再来完善一下这个新生的ajax。我们只需要在onreadystatechange方法里增加一个条件,当请求不成功时调用自身的error方法:

[javascript] view plain copy

  1. ajax.onreadystatechange=function(){
  2. if (ajax.readyState==4 && ajax.status==200) {
  3. a.success(JSON.stringify(ajax.responseText))
  4. }else{
  5. a.error(ajax)
  6. }
  7. }

这样我们就可以在ajax请求的时候加上error方法,当ajax请求失败的时候执行我们想要执行的操作。现在我们抛除跨域请求的问题,当你发送post请求时,你会发现后台接收不到传过来的参数,调用如下:

[javascript] view plain copy

  1. ajax({
  2. method:'get',
  3. url:'http://localhost:8081/test',
  4. data:'a=1',
  5. success:function(res){
  6. console.log(res)
  7. },
  8. error:function(res){
  9. console.log(res)
  10. }
  11. })

后端打印一下传过来的参数,为空。

出现这个问题的原因主要是请求头没有声明,这时候我们需要初始化声明一下请求头,那我们加入一行代码:

[javascript] view plain copy

  1. ajax.setRequestHeader("Content-type", "application/x-www-form-urlencoded");

设置Conten-type为application/x-www-form-urlencoded,现在后端应该是已经可以收到参数了。那我们现在的ajax调用时实在太繁琐,有些东西我们不想填的我们应该给他设置一个默认值,不然就会报错。

比如error方法、method、还有是否异步的bool值等等。那我们再加入一些默认值,现在的ajax是这样的:

[javascript] view plain copy

  1. function ajax(a){
  2. a.method=a.method || 'get';
  3. a.ajax=a.ajax || true;
  4. a.error=a.error || function(){
  5. console.warn('Ajax请求失败');
  6. };
  7. var ajax=new XMLHttpRequest();
  8. ajax.onreadystatechange=function(){
  9. if (ajax.readyState==4 && ajax.status==200) {
  10. a.success(JSON.stringify(ajax.responseText))
  11. }else{
  12. a.error(ajax)
  13. }
  14. }
  15. ajax.open(a.method, a.url,a.ajax)
  16. ajax.setRequestHeader("Content-type", "application/x-www-form-urlencoded");
  17. ajax.send(a.data)
  18. }

现在的ajax还存在一个问题,在post请求的时候,如果我们要传参,是需要通过字符串传参的。那这种的书写规则并不是很友好的:

[javascript] view plain copy

  1. a=1&b=2

而一般框架的传参都是通过json的格式来输入的,我们也不能偏离大众习惯搞独立,当然我们也要保留字符串的传参方式,只是要扩展功能。

那我们需要加一个控制格式的参数,我们这里用dataType这个参数来控制传参格式,默认是字符串格式传参好了,可以选择json格式进行传参即可。如果是json格式传参,我们需要把json转化成字符串类型,代码如下:

[javascript] view plain copy

  1. a.dataType=a.dataType || 'string';
  2. var data=a.data;
  3. if (a.dataType=='json') {
  4. var nowData="";
  5. for (var i in data) {
  6. nowData +=(nowData !=''?'&':'')+i+'='+data[i];
  7. }
  8. data=nowData;
  9. }

这样,我们的ajax也就可以通过json格式进行传参了。现在的ajax完整代码和调用方式如下:

[javascript] view plain copy

  1. function ajax(a){
  2. a.method=a.method || 'get';
  3. a.ajax=a.ajax || true;
  4. a.dataType=a.dataType || 'string';
  5. a.error=a.error || function(){
  6. console.warn('Ajax请求失败');
  7. };
  8. var ajax=new XMLHttpRequest();
  9. ajax.onreadystatechange=function(){
  10. if (ajax.readyState==4 && ajax.status==200) {
  11. a.success(JSON.stringify(ajax.responseText))
  12. }else{
  13. a.error(ajax)
  14. }
  15. }
  16. var data=a.data;
  17. if (a.dataType=='json') {
  18. var nowData="";
  19. for (var i in data) {
  20. nowData +=(nowData !=''?'&':'')+i+'='+data[i];
  21. }
  22. data=nowData;
  23. }
  24. ajax.open(a.method, a.url,a.ajax)
  25. ajax.setRequestHeader("Content-type", "application/x-www-form-urlencoded");
  26. ajax.send(data)
  27. }
  28. //调用Ajax示例
  29. ajax({
  30. method:'post',
  31. url:'http://localhost:8081/test',
  32. dataType:'json',
  33. data:{
  34. a:'1',
  35. b:'2'
  36. },
  37. success:function(res){
  38. console.log(res)
  39. }
  40. })

现在这个Ajax基本上已经可以满足业务上的所以需求,不过还有一点没有实现,我们的Ajax不能设置请求头?!为了一些特殊需求的情况下,我们还是要把这一功能加上的:

[javascript] view plain copy

  1. if (a.requestHeader) {
  2. for (var i in a.requestHeader) {
  3. ajax.setRequestHeader(i,a.requestHeader[i])
  4. }
  5. }

现在的完整代码入下:

[javascript] view plain copy

  1. function ajax(a){
  2. a.method=a.method || 'get';
  3. a.ajax=a.ajax || true;
  4. a.dataType=a.dataType || 'string';
  5. a.error=a.error || function(){
  6. console.warn('Ajax请求失败');
  7. };
  8. var ajax=new XMLHttpRequest();
  9. ajax.onreadystatechange=function(){
  10. if (ajax.readyState==4 && ajax.status==200) {
  11. a.success(JSON.parse(ajax.responseText))
  12. }else if (ajax.readyState !=4 && ajax.status !=200){
  13. a.error(ajax)
  14. }
  15. }
  16. var data=a.data;
  17. if (a.dataType=='json') {
  18. var nowData="";
  19. for (var i in data) {
  20. nowData +=(nowData !=''?'&':'')+i+'='+data[i];
  21. }
  22. data=nowData;
  23. }
  24. ajax.open(a.method, a.url,a.ajax)
  25. if (a.requestHeader) {
  26. for (var i in a.requestHeader) {
  27. ajax.setRequestHeader(i,a.requestHeader[i])
  28. }
  29. }
  30. ajax.setRequestHeader("Content-type", "application/x-www-form-urlencoded");
  31. ajax.send(data)
  32. }

完整示例代码文件:JavaScript封装Ajax完整示例代码

jax怎么用

首先我们从jsp或者是html文件开始

1.导入jQuery包,可以选择通过网络地址进行导入 ,也可以下载jQuery的js文件进行导入,两种方法如下。

jQuery的两种引入方式

2.编写我们的ajax异步方法。

前端代码编写


接下来我们编写后台的Java代码

  1. 导入SpringMVC相关jar包文件,如果试用Maven做依赖管理的话,可以直接在pom.xml中插入以下代码。

maven依赖添加

2.开始编写我们的TestController代码。

后台代码Controller编写

3.接下来就是运行我们的程序,进入html或者jsp点击按钮即可看到效果,我这里就不做演示,大家如果还有什么问题的话随时留言。

然后呢我们来说一下,怎么通过ajax进行异步验证。查看注册用户名是否存在。

首先是数据库设计,在这里我只做简单的示例

  1. 创建数据库,创建表格sql语句如下:

在数据库中创建用户表格

2.创建完成后,表结构如下图所示:

用户表结构

然后就是编写我们的dao层代码

1.jdbc模式代码如下:

jdbc模式代码-1

jdbc模式代码-2

2.mybatis模式如下:

Mybatis模式代码

3.hibernate模式如下:

hibernate模式代码

接下来编写我们的service代码

service通用代码

接下来到了我们的控制器层Controller

Controller控制器代码

最后就是我们的重头戏了——我们的前端代码以及通过jquery实现ajax异步验证

html代码,用户注册登陆页面

结束语

至此,我们的验证算是完成,大家如果还有什么问题,可以评论或者留言告诉我,我会尽全力为大家进行解答,谢谢各位。如果大家觉得有什么不便,可以私信联系我。