3.8 一切Ajax都是基于$.ajax()
在jQuery中,所有Ajax的简写函数其实都基于一个基本的ajax()函数,该函数提供Ajax详细的配置入口,可以对Ajax进行更为深入的控制,适合一些比较特殊的应用场景。ajax()函数的参数只有一个,是一个选项的Object对象,这个选项规定了各种参数的配置规范。
● async(Boolean):默认设置(默认true)下,所有请求均为异步请求。如果需要发送同步请求,那么将此选项设置为false。注意,同步请求将锁住浏览器,用户其他操作必须等待请求完成才可以执行。
● beforeSend(Function):发送请求前可修改XMLHttpRequest对象的函数,如添加自定义HTTP头。XMLHttpRequest对象是唯一的参数。
● complete(Function) :请求完成后回调函数(请求成功或失败时均调用)。参数为XMLHttpRequest对象和一个描述成功请求类型的字符串。
● contentType(String):发送信息至服务器时内容的编码类型(默认是"application/x-www-form-urlencoded")。默认值适合大多数应用场合。
● data(Object, String):发送到服务器的数据。将自动转换为请求字符串格式。在GET请求中将附加在URL后。查看processData选项说明以禁止此自动转换。格式必须为Key/Value。如果为数组,jQuery就会自动为不同值对应同一个名称,如{foo:["bar1","bar2"]}转换为’&foo=bar1&foo=bar2'。
● dataFilter(Function):给Ajax返回的原始数据进行预处理的函数。提供data和type两个参数:data是Ajax返回的原始数据,type是调用jQuery.ajax时提供的dataType参数。函数返回的值将由jQuery进一步处理。
● dataType(String):预期服务器返回的数据类型。如果不指定,jQuery就会自动根据HTTP包MIME信息返回responseXML或responseText,并作为回调函数参数传递,可用值有xml、html、script、json、jsonp和text。
● error(Function):请求失败时调用时间(默认自动判断(xml或html))。参数为XMLHttpRequest对象、错误信息、(可选)捕获的错误对象。
● global (Boolean):是否触发全局Ajax事件(默认为true)。设置为false将不会触发全局Ajax事件,如ajaxStart或ajaxStop可用于控制不同的Ajax事件。
● jsonp(String):在一个jsonp请求中重写回调函数的名字。这个值用来代替在"callback=? "这种GET或POST请求中URL参数里的callback部分,如{jsonp:'onJsonPLoad'}会导致将“onJsonPLoad=? ”传给服务器。
● username(String):用于响应HTTP访问认证请求的用户名。
● password(String):用于响应HTTP访问认证请求的密码。
● scriptCharset (String):只有当请求时dataType为jsonp或script,并且type是GET才会用于强制修改charset。通常在本地和远程的内容编码中不同时使用。
● success(Function):请求成功后回调函数。参数为服务器返回数据、数据格式。
● timeout(Number):设置请求超时时间(毫秒),此设置将覆盖全局设置。
● url(String):发送请求的地址(默认为当前页地址)。
● type(String):请求方式POST或GET(默认为GET)。注意,其他HTTP请求方法(如PUT和DELETE)也可以使用,但仅部分浏览器支持。
● cache(Boolean):默认为true。dataType为script时默认为false,设置为false将不会从浏览器缓存中加载请求信息。
这些选项要么是对某些属性的控制,要么是对某些事件回调的指定。以下示例将展示一个详细使用ajax()函数的应用。
【示例3-10】jq_ajaxALL.html
01 <! DOCTYPE HTML> 02 <html> 03 <head> 04 <title>jQuery使用底层的ajax()函数</title> 05 <meta http-equiv="Content-Type" content="text/html; charset=UTF-8"/> 06 <script type="text/javascript" src="../jquery-3.1.1.js"></script> 07 <script type="text/javascript"> 08 function sendAjax(){ 09 $.ajax({ //调用ajax()函数,参数为选项object 10 url: 'data.txt', //url地址 11 type: 'GET', //HTTP请求的方法,这里是GET 12 dataType: 'text', //预期返回数据类型 13 data: null, //POST需要的数据 14 error: function(){ //当发生错误时的回调 15 alert('error'); 16 }, 17 timeout: function(){//发生请求超时的回调 18 alert('time out'); 19 }, 20 success: function(data){//成功以后的回调,也就是 readyStatus=4且status=200 21 alert(data); 22 } 23 }); 24 } 25 </script> 26 </head> 27 <body style="text-align:center"> 28 <input type="button" value="AJAX" onclick="sendAjax(); "/> 29 </body> 30 </html>
本示例的效果如图3.11所示。
图3.11 $.ajax ()的应用
尽管使用ajax()函数需要提供比较多的参数配置和函数回调指定,但是相较于最原始的Ajax使用,显得清晰得多。一般来说,开发人员会提供范例代码中的选项,如url、type、data、dataType、success等。