繼上一篇 [JavaScript-發送HTTP請求 XMLHttpRequest] 延續,這一篇是主要紀錄使用jQuery Ajax方式去發送HTTP請求。
將使用到的幾項技術
使用目標
以jQuery AJAX方式,呼叫https://steven5j.github.io/Blog/Data/Godzilla_Monster.json,
送出 GET 請求,回應的 影像 URI,添加至頁面
Get請求方式
一、使用jQuery.get()
$.get(url, [data])方法,參 網址URI,
◦url參數,傳送請求的URL地址
◦[data]參數,要傳送給伺服器的資料(如沒有就空)
其後伴隨著 done() 方法,設置回應後載入成功時的回調函式 (callback)
// jQuery.get 方法 回傳實作 Promise 的 jQuery XMLHttpRequest 物件 $.get("網址URL")
※「$」是 jQuery 全域函式的捷徑符號
※jQuery AJAX就是把 XMLHttpRequest (XHR) 再包一層 !並處理許多麻煩的事情 (e.g., 請求生命週期、回應解析)。
二、使用jQuery的Deferred 物件
JavaScript(ES6) 的 Promise 在 jQuery 中的實作者即 Deferred 物件 (Deferred Object)
方法鏈
標準的 Promise 共有三種狀態 :
- pending:等待中,為初始之狀態,即不是 fulfilled 也不是 rejected。
- fulfilled:已完成,表示操作完成,又稱 resolved。
- rejected:已拒絕,表示操作失敗。
- … (請參考 官方文件)
※穩定 (settled) 代表:Promise 只會 完成(fulfilled) 或 拒絕(rejected) 一次,且不會再改變。
※了解使用Promise 可參考 :使用 Promise – MDN
jQuery 常用的 Deferred 物件:
done(x) — 當 jQuery.XMLHttpRequest狀態為 Resolved 才執行 x,並回傳新的 Resovled jQuery.XMLHttpRequest。
fail(x) — 當 jQuery.XMLHttpRequest 狀態為 Rejected 才執行 x,並回傳新的 Rejected jQuery.XMLHttpRequest。
always(x) — 總是執行 x,並回傳新的 Resovled jQuery.XMLHttpRequest。
$.get("https://steven5j.github.io/Blog/Data/Godzilla_Monster.json") .done(res => { jsonHandler(res) ;console.log("success!"); }) .fail(function(){console.error("error")}) .always(function(){console.log("Finish!")});
三、輸出結果
看原本預計要怎麼輸出,可以使用簡單的方式,這裡就很簡單的載入圖片的方式。
// 簡易處理 JSON 回應處理 輸出格式 function jsonHandler(response) { let data = response.results; // 建立緩衝的文件片段 docFrag let docFrag = document.createDocumentFragment(); for (var i = 0, l = data.length; i < l; i++) { var url = data[i].url; var img = document.createElement("img"); img.src = url; img.width = 300; // 將 img 添加至 docFrag docFrag.appendChild(img); } // 將含有多個 img 的 docFrag // 一次新增至 HTML 的 body 中 document.body.appendChild(docFrag); }
POST 請求方式
$.post()方法,第一個參數放置的是 目標 URI,第二個參數放欲發送的 資料酬載 (payload):
※使用 W3schools網站來學習與嘗試使用。
$.post("demo_test_post.asp", {name: "Steven", city: "Taipei"}) .done(function (data) { console.log("success"); document.body.innerHTML = data; }) .fail(function (jqXHR, textStatus, errorThrown) { console.log(jqXHR); console.log(textStatus); console.error(errorThrown); }) .always(function () { console.log("finished"); });
※fail()的部分可傳入三個參數。
可至 W3schools 嘗試。
AJAX() 方法
jQuery.Get() 或 jQuery.post()..等 快捷方法中,都是呼叫jQuery.ajax()方法
$.ajax({ url: "url", //請求的url地址 contentType: "application/json", //返回格式為 dataType: "json", async: true, //請求是否非同步,預設為非同步,這也是ajax重要特性 data: JSON.stringify({ id : "value" }), //引數值 method: "PUT" //請求方式 type: "PUT", }) .done(function (data, textStatus, jqXHR) { console.log("success"); console.log(data); }) .fail(function (jqXHR, textStatus, errorThrown) { console.log(errorThrown); }) .always(function () { console.log("finished"); });
※使用 jQuery 1.9.0 以前的版本,需將 method 以 type 屬性替換,
※可參閱 官方文件。
範例網址目錄
參考引用資料:
jQuery Ajax — JavaScript 發送 HTTP 請求 (II):https://notfalse.net/30/jquery-ajax
Category: Deferred Object:https://api.jquery.com/category/deferred-object/
談談jQuery Ajax用法詳解:https://codertw.com/%E5%89%8D%E7%AB%AF%E9%96%8B%E7%99%BC/272853/
Pingback: JavaScript-發送HTTP請求 Fetch API - Steven玄