JavaScript中$.ajax()最新用法舉例詳解
一、基礎(chǔ)語(yǔ)法與核心參數(shù)
$.ajax({ url: "https://api.example.com/data", method: "GET", // 推薦使用 method 替代 type data: { key: "value" }, dataType: "json", headers: { "Authorization": "Bearer token" }, success: function(response) {}, error: function(xhr, error) {}, complete: function() {}, });
?關(guān)鍵參數(shù)更新說(shuō)明
參數(shù)名 | 類型 | 說(shuō)明 |
---|---|---|
method | String | ?推薦替代 type,支持 GET, POST, PUT, DELETE 等。 |
?headers | Object | 自定義請(qǐng)求頭(如 Authorization),取代舊版 jsonp 的回調(diào)名稱配置。 |
?async | Boolean | 默認(rèn) true(異步),設(shè)為 false 會(huì)阻塞主線程(慎用)。 |
?二、現(xiàn)代回調(diào)方式(Promise 風(fēng)格)?
jQuery 3.x 開(kāi)始全面支持 ?Promise API,推薦使用 .done(), .fail(), .always() 替代舊版回調(diào):
$.ajax({ url: "/api", method: "POST", data: JSON.stringify({ name: "John" }), }) .done(function(response) { console.log("成功:", response); }) .fail(function(jqXHR, textStatus) { console.error("失敗原因:", textStatus); // "timeout", "error", "abort" }) .always(function() { console.log("請(qǐng)求完成(無(wú)論成?。?); });
?三、異步處理與 async/await
通過(guò)將 $.ajax() 返回的 jqXHR 對(duì)象轉(zhuǎn)換為 ?Promise,可使用 async/await:
async function fetchData() { try { const response = await $.ajax({ url: "/api/data", method: "GET", dataType: "json", }); console.log(response); } catch (error) { if (error.responseJSON) { console.error("服務(wù)器錯(cuò)誤:", error.responseJSON.message); } else { console.error("網(wǎng)絡(luò)錯(cuò)誤:", error.statusText); } } } fetchData();
?四、高級(jí)場(chǎng)景示例
?1. 發(fā)送 JSON 數(shù)據(jù)
$.ajax({ url: "/submit", method: "POST", contentType: "application/json", data: JSON.stringify({ email: "user@example.com" }), dataType: "json", }) .done(function(data) { console.log("提交成功:", data); });
?2. 文件上傳
const formData = new FormData(document.getElementById("uploadForm")); $.ajax({ url: "/upload", method: "POST", data: formData, processData: false, // 防止 jQuery 拆分 FormData contentType: false, // 不設(shè)置 Content-Type(瀏覽器自動(dòng)處理) }) .done(function(response) { console.log("上傳成功:", response); });
?3. 跨域請(qǐng)求(CORS)?
$.ajax({ url: "https://api.example.com/cross-origin", method: "GET", xhrFields: { withCredentials: true, // 發(fā)送 Cookie }, headers: { "Access-Control-Allow-Origin": "*", // 服務(wù)器需配置 }, }) .done(function(data) { console.log("跨域數(shù)據(jù):", data); });
?4. 請(qǐng)求取消
const xhr = $.ajax({ url: "/long-task", method: "GET", timeout: 5000, // 5秒超時(shí) }); // 取消請(qǐng)求 setTimeout(() => xhr.abort(), 3000);
?五、錯(cuò)誤處理最佳實(shí)踐
$.ajax({ url: "/api/data", method: "GET", }) .fail(function(jqXHR, textStatus, errorThrown) { switch (jqXHR.status) { case 400: console.error("參數(shù)錯(cuò)誤:", jqXHR.responseJSON.errors); break; case 401: console.error("未授權(quán),請(qǐng)登錄"); break; case 404: console.error("資源不存在"); break; default: console.error("請(qǐng)求失敗:", textStatus, errorThrown); } });
?六、安全注意事項(xiàng)
1.?CSRF 令牌防護(hù)?(Spring Security 等框架需要):
$.ajaxSetup({ headers: { "X-CSRFToken": csrfToken // 從 meta 標(biāo)簽或 cookie 中獲取 } });
?2.防止 XSS 攻擊:
對(duì)用戶輸入使用 encodeURIComponent() 或 DOMPurify 清理。
?3.HTTPS 強(qiáng)制:
$.ajax({ url: "https://api.example.com", // 確保協(xié)議為 HTTPS });
?七、替代方法:更簡(jiǎn)潔的 API
對(duì)于簡(jiǎn)單請(qǐng)求,可使用以下快捷方法:
| | |
| | |
方法 | 說(shuō)明 |
---|---|
$.get() | GET 請(qǐng)求 |
$.post() | POST 請(qǐng)求 |
$.getJSON() | GET + JSONP |
$.ajaxSetup() | 全局默認(rèn)配置 |
// 使用 $.getJSON() $.getJSON("/api/data") .done(console.log) .fail(console.error);
?八、jQuery 3.x 的重要變化
- ?棄用 type 參數(shù):改用 method。 ?
- 默認(rèn) cache: true:GET 請(qǐng)求默認(rèn)緩存(可手動(dòng)設(shè)置 cache:false)。
- **jsonp 改為 dataType: “jsonp” **:
$.ajax({ url: "https://api.example.com/data", dataType: "jsonp", });
?九、調(diào)試技巧
?1.查看網(wǎng)絡(luò)請(qǐng)求:
瀏覽器開(kāi)發(fā)者工具(F12)的 ?Network 面板。
?2.啟用調(diào)試日志:
$.ajaxSetup({ debug: true // 輸出詳細(xì)日志到控制臺(tái) });
通過(guò)掌握以上內(nèi)容,可以高效使用 $.ajax() 處理復(fù)雜的前端請(qǐng)求場(chǎng)景,同時(shí)結(jié)合現(xiàn)代 JavaScript 特性提升代碼可讀性和可維護(hù)性。
總結(jié)
到此這篇關(guān)于JavaScript中$.ajax()最新用法的文章就介紹到這了,更多相關(guān)JS $.ajax()用法詳解內(nèi)容請(qǐng)搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關(guān)文章希望大家以后多多支持腳本之家!
相關(guān)文章
ES6中的Promise對(duì)象與async和await方法詳解
Promise是es6引入的異步編程薪解決方案,語(yǔ)法上promise就是一個(gè)構(gòu)造函數(shù),用來(lái)封裝異步操作病可以獲取其成功或失敗的結(jié)果,這篇文章主要介紹了ES6中的Promise對(duì)象與async和await方法,需要的朋友可以參考下2022-12-12JavaScript實(shí)現(xiàn)簡(jiǎn)單隨機(jī)點(diǎn)名器
這篇文章主要為大家詳細(xì)介紹了JavaScript實(shí)現(xiàn)簡(jiǎn)單隨機(jī)點(diǎn)名器,文中示例代碼介紹的非常詳細(xì),具有一定的參考價(jià)值,感興趣的小伙伴們可以參考一下2019-11-11js實(shí)現(xiàn)左右兩側(cè)浮動(dòng)廣告
這篇文章主要為大家詳細(xì)介紹了js實(shí)現(xiàn)左右兩側(cè)浮動(dòng)廣告,具有一定的參考價(jià)值,感興趣的小伙伴們可以參考一下2018-07-07JS常見(jiàn)簡(jiǎn)單正則表達(dá)式驗(yàn)證功能小結(jié)【手機(jī),地址,企業(yè)稅號(hào),金額,身份證等】
這篇文章主要介紹了JS常見(jiàn)簡(jiǎn)單正則表達(dá)式驗(yàn)證功能,結(jié)合實(shí)例形式總結(jié)分析了JS針對(duì)手機(jī),地址,企業(yè)稅號(hào),金額,身份證等的常見(jiàn)驗(yàn)證技巧,需要的朋友可以參考下2017-01-01js跟隨滾動(dòng)條滾動(dòng)浮動(dòng)代碼
js跟隨滾動(dòng)條滾動(dòng)浮動(dòng)代碼,對(duì)于firefox不兼容。2009-12-12JavaScript實(shí)現(xiàn)設(shè)置默認(rèn)日期范圍為最近40天的方法分析
這篇文章主要介紹了JavaScript實(shí)現(xiàn)設(shè)置默認(rèn)日期范圍為最近40天的方法,結(jié)合實(shí)例形式分析了javascript結(jié)合HTML5 date元素進(jìn)行時(shí)間運(yùn)算相關(guān)操作技巧,需要的朋友可以參考下2017-07-07