jQuery中$.ajax()方法的具體使用
1 Ajax操作
1.1 $.ajax
jQuery對象上面還定義了Ajax方法($.ajax()),用來處理Ajax操作。調(diào)用該方法后,瀏覽器就會向服務(wù)器發(fā)出一個HTTP請求。
$.ajax(url,[settings]);通過 HTTP 請求加載遠程數(shù)據(jù)。jQuery 底層 AJAX 實現(xiàn)。簡單易用的高層實現(xiàn)見 $.get, $.post 等。$.ajax() 返回其創(chuàng)建的 XMLHttpRequest 對象。大多數(shù)情況下你無需直接操作該函數(shù),除非你需要操作不常用的選項,以獲得更多的靈活性。最簡單的情況下,$.ajax()可以不帶任何參數(shù)直接使用。注意,所有的選項都可以通過$.ajaxSetup()函數(shù)來全局設(shè)置。
$.ajax()的用法主要有兩種。
$.ajax(url[, options]) $.ajax([options])
上面代碼中的url,指的是服務(wù)器網(wǎng)址,options則是一個對象參數(shù),設(shè)置Ajax請求的具體參數(shù)。
$.ajax({ async: true, url: '/url/to/json', type: 'GET', data : { id : 123 }, dataType: 'json', timeout: 30000, success: successCallback, error: errorCallback, complete: completeCallback, statusCode: { 404: handler404, 500: handler500 } }) function successCallback(json) { $('<h1/>').text(json.title).appendTo('body'); } function errorCallback(xhr, status){ console.log('出問題了!'); } function completeCallback(xhr, status){ console.log('Ajax請求已結(jié)束。'); }
上面代碼的對象參數(shù)有多個屬性,含義如下:
- accepts:將本機所能處理的數(shù)據(jù)類型,告訴服務(wù)器。
- async:該項默認(rèn)為true,如果設(shè)為false,則表示發(fā)出的是同步請求。
- beforeSend:指定發(fā)出請求前,所要調(diào)用的函數(shù),通常用來對發(fā)出的數(shù)據(jù)進行修改。
- cache:該項默認(rèn)為true,如果設(shè)為false,則瀏覽器不緩存返回服務(wù)器返回的數(shù)據(jù)。注意,瀏覽器本身就不會緩存POST請求返回的數(shù)據(jù),所以即使設(shè)為false,也只對HEAD和GET請求有效。
- complete:指定當(dāng)HTTP請求結(jié)束時(請求成功或請求失敗的回調(diào)函數(shù),此時已經(jīng)運行完畢)的回調(diào)函數(shù)。不管請求成功或失敗,該回調(diào)函數(shù)都會執(zhí)行。它的參數(shù)為發(fā)出請求的原始對象以及返回的狀態(tài)信息。
- contentType:發(fā)送到服務(wù)器的數(shù)據(jù)類型。
- context:指定一個對象,作為所有Ajax相關(guān)的回調(diào)函數(shù)的this對象。
- crossDomain:該屬性設(shè)為true,將強制向相同域名發(fā)送一個跨域請求(比如JSONP)。
- data:向服務(wù)器發(fā)送的數(shù)據(jù),如果使用GET方法,此項將轉(zhuǎn)為查詢字符串,附在網(wǎng)址的最后。
- dataType:返回值類型,服務(wù)器返回的數(shù)據(jù)類型,可以設(shè)為text、html、script、json、jsonp和xml。
- error:請求失敗時的回調(diào)函數(shù),函數(shù)參數(shù)為發(fā)出請求的原始對象以及返回的狀態(tài)信息。
- headers:指定HTTP請求的頭信息。
- ifModified:如果該屬性設(shè)為true,則只有當(dāng)服務(wù)器端的內(nèi)容與上次請求不一樣時,才會發(fā)出本次請求。
- jsonp:指定JSONP請求“callback=?”中的callback的名稱。
- jsonpCallback: 指定JSONP請求中回調(diào)函數(shù)的名稱。
- mimeType:指定HTTP請求的mime type。
- password:指定HTTP認(rèn)證所需要的密碼。
- statusCode:值為一個對象,為服務(wù)器返回的狀態(tài)碼,指定特別的回調(diào)函數(shù)。
- success:請求成功時的回調(diào)函數(shù),函數(shù)參數(shù)為服務(wù)器傳回的數(shù)據(jù)、狀態(tài)信息、發(fā)出請求的原始對象。
- timeout: 等待的最長毫秒數(shù)。如果過了這個時間,請求還沒有返回,則自動將請求狀態(tài)改為失敗。
- type:向服務(wù)器發(fā)送信息所使用的HTTP動詞,默認(rèn)為GET,其他動詞有POST、PUT、DELETE。
- url:服務(wù)器端網(wǎng)址。這是唯一必需的一個屬性,其他屬性都可以省略。
- username:指定HTTP認(rèn)證的用戶名。
- xhr:指定生成XMLHttpRequest對象時的回調(diào)函數(shù)。
這些參數(shù)之中,url可以獨立出來,作為ajax方法的第一個參數(shù)。也就是說,上面代碼還可以寫成下面這樣。
$.ajax('/url/to/json',{ type: 'GET', dataType: 'json', success: successCallback, error: errorCallback })
作為向服務(wù)器發(fā)送的數(shù)據(jù),data屬性也可以寫成一個對象。
$.ajax({ url: '/remote/url', data: { param1: 'value1', param2: 'value2', ... } }); // 相當(dāng)于 $.ajax({ url: '/remote/url?param1=value1¶m2=value2...' }});
1.2 簡便寫法
ajax方法還有一些簡便寫法。
- $.get():發(fā)出GET請求。
- $.getScript():讀取一個JavaScript腳本文件并執(zhí)行。
- $.getJSON():發(fā)出GET請求,讀取一個JSON文件。
- $.post():發(fā)出POST請求。
- $.fn.load():讀取一個html文件,并將其放入當(dāng)前元素之中。
一般來說,這些簡便方法依次接受三個參數(shù):url、數(shù)據(jù)、成功時的回調(diào)函數(shù)。
1.2.1 $.get(),$.post()
這兩個方法分別對應(yīng)HTTP的GET方法和POST方法。
$.get('/data/people.html', function(html){ $('#target').html(html); }); $.post('/data/save', {name: 'Rebecca'}, function (resp){ console.log(JSON.parse(resp)); });
get方法和post方法的參數(shù)相同,第一個參數(shù)是服務(wù)器網(wǎng)址,該參數(shù)是必需的,其他參數(shù)都是可選的。第二個參數(shù)是發(fā)送給服務(wù)器的數(shù)據(jù),第三個參數(shù)是操作成功后的回調(diào)函數(shù)。
上面的post方法對應(yīng)的ajax寫法如下。
$.ajax({ type: 'POST', url: '/data/save', data: {name: 'Rebecca'}, dataType: 'json', success: function (resp){ console.log(JSON.parse(resp)); } });
1.2.2 $.getJSON()
ajax方法的另一個簡便寫法是getJSON方法。當(dāng)服務(wù)器端返回JSON格式的數(shù)據(jù),可以用這個方法代替$.ajax方法。
$.getJSON('url/to/json', {'a': 1}, function(data){ console.log(data); });
上面的代碼等同于下面的寫法。
$.ajax({ dataType: "json", url: '/url/to/data', data: {'a': 1}, success: function(data){ console.log(data); } });
1.2.3 $.getScript()
$.getScript方法用于從服務(wù)器端加載一個腳本文件。
$.getScript('/static/js/myScript.js', function() { functionFromMyScript(); });
上面代碼先從服務(wù)器加載myScript.js腳本,然后在回調(diào)函數(shù)中執(zhí)行該腳本提供的函數(shù)。
getScript的回調(diào)函數(shù)接受三個參數(shù),分別是腳本文件的內(nèi)容,HTTP響應(yīng)的狀態(tài)信息和ajax對象實例。
$.getScript( "ajax/test.js", function (data, textStatus, jqxhr){ console.log( data ); // test.js的內(nèi)容 console.log( textStatus ); // Success console.log( jqxhr.status ); // 200 });
getScript是ajax方法的簡便寫法,因此返回的是一個deferred對象,可以使用deferred接口。
jQuery.getScript("/path/to/myscript.js") .done(function() { // ... }) .fail(function() { // ... });
1.3 Ajax事件
jQuery提供以下一些方法,用于指定特定的AJAX事件的回調(diào)函數(shù)。
- .ajaxComplete():ajax請求完成。
- .ajaxError():ajax請求出錯。
- .ajaxSend():ajax請求發(fā)出之前。
- .ajaxStart():第一個ajax請求開始發(fā)出,即沒有還未完成ajax請求。
- .ajaxStop():所有ajax請求完成之后。
- .ajaxSuccess():ajax請求成功之后。
下面是示例。
$('#loading_indicator') .ajaxStart(function (){$(this).show();}) .ajaxStop(function (){$(this).hide();});
下面是處理Ajax請求出錯(返回404或500錯誤)的例子。
$(document).ajaxError(function (e, xhr, settings, error) { console.log(error); });
1.4 返回值
ajax方法返回的是一個deferred對象,可以用then方法為該對象指定回調(diào)函數(shù)(詳細(xì)解釋參見《deferred對象》一節(jié))。
$.ajax({ url: '/data/people.json', dataType: 'json' }).then(function (resp){ console.log(resp.people); })
1.5 中文亂碼
1.5.1 解決方法一
js文件中使用encodeURI()方法。
var url = "Validate.jsp?id=" + encodeURI(encodeURI(idField.value));
2.在后臺中對傳遞的參數(shù)進行URLDecoder解碼
String username = URLDecoder.decode(request.getParameter("id"),"UTF-8")
1.5.2 解決方法二
當(dāng)網(wǎng)站頁面不是utf-8編碼時,ajax提交的中文便會變成亂碼。
解決方法如下:找到j(luò)query.js里的contentType:application/x-www-form-urlencoded,將它改成contentType:application/x-www-form-urlencoded; charset=UTF-8就可以了。
原因:未指定charset時,jquery使用ISO-8859-1,ISO8859-1,通常叫做Latin-1。Latin-1包括了書寫所有西方歐洲語言不可缺少的附加字符。jquery的ajax根本沒有考慮到國際化的問題,而使用了歐洲的字符集,所以傳遞中文時才會出現(xiàn)亂碼
到此這篇關(guān)于jQuery中$.ajax()方法的具體使用的文章就介紹到這了,更多相關(guān)jQuery $.ajax()內(nèi)容請搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關(guān)文章希望大家以后多多支持腳本之家!
相關(guān)文章
jQuery 1.9.1源碼分析系列(十四)之常用jQuery工具
這篇文章主要介紹了jQuery 1.9.1源碼分析系列(十四)之常用jQuery工具的相關(guān)資料,需要的朋友可以參考下2015-12-12jQuery實現(xiàn)類似標(biāo)簽風(fēng)格的導(dǎo)航菜單效果代碼
這篇文章主要介紹了jQuery實現(xiàn)類似標(biāo)簽風(fēng)格的導(dǎo)航菜單效果代碼,涉及jquery鼠標(biāo)事件操作頁面元素的遍歷與樣式動態(tài)修改技巧,具有一定參考借鑒價值,需要的朋友可以參考下2015-08-08jquery實現(xiàn)動態(tài)操作select選中
文章主要向大家介紹了jQuery 根據(jù)值或者文本選中select的方法和示例,非常實用的功能,需要的朋友可以參考下2015-02-02JQuery擴展插件Validate—4設(shè)置錯誤提示的樣式
JQuery擴展插件Validate—4設(shè)置錯誤提示的樣式,使用Validate的朋友可以參考下。2011-09-09