学科分类

$.ajax()方法

jQuery提供了$.ajax()方法,用来通过Ajax(Asynchronous JavaScript and XML,异步JavaScript和XML)技术请求服务器,获取服务器的响应结果。Ajax技术用来在浏览器中通过JavaScript向服务器发送请求,接收服务器返回的结果。

需要注意的是,Ajax技术具有一定的学习门槛,需要结合服务器端才能实现,读者只有具备了服务器搭建、域名的配置、HTTP协议、服务器端应用开发、同源策略、数据交互格式(XML、JSON)等基础知识,才能完全理解。考虑到本书针对的人群是前端开发初学者,在这个阶段还没有学习过服务器端知识,所以有关服务器端的内容不在本书中讲解,读者可以搭配本书的同系列图书来继续学习这部分内容。

1. 如何发送Ajax请求

由于搭建服务器比较麻烦,为了方便地看到Ajax的执行效果,可以使用HBuilder开发工具提供的内置服务器功能。下面讲解如何在HBuilder中使用$.ajax()发送Ajax请求。

(1)在HBuilder中执行【工具】-【选项】,找到Web服务器设置,如图1所示。

img

图1 Web服务器设置

在图1中,将“HTML类文件”选择使用HBuilder内置Web服务器即可。

(2)在HBuilder中创建一个新的项目,在项目中创建两个文件,分别是ajax.html和1.txt,然后将jQuery文件jquery-3.3.1.min.js复制到项目中。

server.html文件中的代码如下所示。

服务器收到了请求

ajax.html文件中的代码如下所示。

 1  <script src="jquery-3.3.1.min.js"></script>
 2  <script>
 3   $.ajax({
 4     type: 'GET',            // 请求方式
 5     url: 'server.html',        // 请求地址
 6     data: { id: 2, name: 'Hello' },  // 发送的数据
 7     success: function(msg) {     // 请求成功后执行的函数
 8      console.log(msg);
 9     }
 10  });
 11 </script>

上述代码表示发送一个Ajax请求,请求类型为GET,请求地址为server.html(当前路径下的server.html),请求时发送的数据为“{ id: 2, name: 'Hello' }”。由于$.ajax()是一个异步方法,当它执行后就会立即向服务器发送请求,并且会继续执行后面的代码。当请求成功后,会收到服务器响应的结果,然后就会执行success里面的回调函数,将服务器返回的结果msg输出到控制台。

(3)在HBuilder的项目中调用浏览器打开ajax.html,会看到浏览器显示的地址的开头部分为http://127.0.0.1:8020,说明此时已经通过内置服务器打开了网页。

当Ajax请求发送后,在控制台中会看到已经输出了“服务器收到了请求”,并且在开发者工具的Network面板中,可以看到Ajax请求的详细信息,如图2所示。

img

图2 Ajax请求的详细信息

小提示:

(1)如果使用浏览器打开本地的网页文件,Ajax请求是无法发送成功的,必须将网页放在服务器下,使用“http://”或“https://”开头的URL地址来访问。

(2)$.ajax()请求的地址受同源策略的限制,必须是相同域名、相同协议、相同端口号下的地址,否会会被浏览器拦截,在控制台中会看到错误提示。

2. jQuery中的其他Ajax方法

除了$.ajax()方法,jQuery还提供了更加快捷的get()、post()和load()方法,也可以发送Ajax请求。下面通过表1列举jQuery中常用的Ajax操作方法。

表1 常用的Ajax操作方法

分类 方法 说明
高级应用 $.get(url[,data][,fn][,type]) 通过远程HTTP GET请求载入信息
$.post(url[,data][,fn][, type]) 通过远程HTTP POST请求载入信息
$.getJSON(url[,data][,fn]) 通过HTTP GET请求载入JSON数据
$.getScript(url[,fn]) 通过HTTP GET请求载入并执行一个JavaScript文件
对象.load(url[,data] [,fn]) 载入远程HTML文件代码并插入至DOM中
底层应用 $.ajax(url[,options]) 通过HTTP请求加载远程数据
$.ajaxSetup(options) 设置全局Ajax默认选项

在表1中,参数url表示请求的URL地址;data表示传递的参数;fn表示请求成功时执行的回调函数;参数type用于设置服务器返回的数据类型,如XML、JSON、HTML、TEXT等;参数options用于设置Ajax请求的相关选项,常用的选项如表2所示。

表2 Ajax选项

选项名称 说明
url 处理Ajax请求的服务器地址
data 发送Ajax请求时传递的参数,字符串类型
success Ajax请求成功时所触发的回调函数
type 发送的HTTP请求方式,如get、post
datatype 期待的返回值类型,如xml、json、script或html数据类型
async 是否异步,true表示异步,false表示同步,默认值为true
cache 是否缓存,true表示缓存,false表示不缓存,默认值为true
contentType 请求头,默认值为application/x-www-form-urlencoded; charset=UTF-8
complete 当服务器URL接收完Ajax请求传送的数据后触发的回调函数
jsonp 在一个jsonp请求中重写回调函数的名称

下面通过代码演示$.get()和$.post()方法的使用。

// $.get()方法
$.get('server.html', function(data, status) {
 console.log('服务器返回结果:' + data + '\n请求状态:' + status);
});
// $.post()方法(HBuilder内置Web服务器不支持POST方式)
$.post('server.php', { id: 1 }, function(data) {
 console.log('服务器返回结果:' + data + '\n请求状态:' + status);
});
点击此处
隐藏目录