ãã§ãã API ã¯ãHTTP ãªã¯ã¨ã¹ããè¡ããã¬ã¹ãã³ã¹ãå¦çããããã® JavaScript ã¤ã³ã¿ã¼ãã§ã¤ã¹ãæä¾ãã¾ãã
ãã§ãã㯠XMLHttpRequest
ã®ç¾ä»£ã®ç½®ãæãã§ããã³ã¼ã«ããã¯ã使ç¨ãã XMLHttpRequest
ã¨ã¯ç°ãªãããã§ããã¯ãããã¹ãã¼ã¹ã§ããµã¼ãã¹ã¯ã¼ã«ã¼ããªãªã¸ã³éãªã½ã¼ã¹å
±æ (CORS) ã®ãããªç¾ä»£ã®ã¦ã§ãã®æ©è½ã¨çµ±åããã¦ãã¾ãã
ãã§ãã API ã§ã¯ãfetch()
ãå¼ã³åºãã¦ãªã¯ã¨ã¹ããè¡ãã¾ãããã㯠ã¦ã£ã³ãã¦ã¨ã¯ã¼ã«ã¼ã®ä¸¡æ¹ã®ã³ã³ããã¹ãã§ã°ãã¼ãã«é¢æ°ã¨ãã¦å©ç¨ã§ãã¾ãããã®ã³ã³ããã¹ãã«ã¯ Request
ãªãã¸ã§ã¯ããããã§ãããã URL ãæ ¼ç´ããæååãããã³ãªã¯ã¨ã¹ããæ§æããããã®ãªãã·ã§ã³å¼æ°ã渡ãã¾ãã
fetch()
颿°ã¯ Promise
ãè¿ãã¾ãããã®ãããã¹ã¯ãµã¼ãã¼ã®ã¬ã¹ãã³ã¹ã表ã Response
ãªãã¸ã§ã¯ãã§å±¥è¡ããã¾ããã¬ã¹ãã³ã¹ã«å¯¾ãã¦é©åãªã¡ã½ãããå¼ã³åºãã¨ããªã¯ã¨ã¹ãã®ã¹ãã¼ã¿ã¹ã調ã¹ãããã¬ã¹ãã³ã¹æ¬ä½ãããã¹ãã JSON ãªã©æ§ã
ãªå½¢å¼ã§åãåºããã¨ãã§ãã¾ãã
以ä¸ã¯ fetch()
ã使ç¨ãã¦ãµã¼ãã¼ãã JSON ãã¼ã¿ãåå¾ããæå°éã®é¢æ°ã§ãã
async function getData() {
const url = "https://example.org/products.json";
try {
const response = await fetch(url);
if (!response.ok) {
throw new Error(`ã¬ã¹ãã³ã¹ã¹ãã¼ã¿ã¹: ${response.status}`);
}
const json = await response.json();
console.log(json);
} catch (error) {
console.error(error.message);
}
}
URL ãæ ¼ç´ããæååã宣è¨ããfetch()
ãå¼ã³åºãã¦ãä½è¨ãªãªãã·ã§ã³ãä»ããã« URL ãæ¸¡ãã¾ãã
fetch()
颿°ã¯ä½ãã¨ã©ã¼ãããã¨ãããã¹ãæå¦ãã¾ããããµã¼ãã¼ã 404
ã®ãããªã¨ã©ã¼ã¹ãã¼ã¿ã¹ã§å¿çããå ´åã¯æå¦ãã¾ããããããã£ã¦ãã¬ã¹ãã³ã¹ã®ã¹ãã¼ã¿ã¹ã調ã¹ã¦ãOK ã§ãªãå ´åã¯ã¨ã©ã¼ã throw ãã¾ãã
ããã§ãªãå ´åã¯ãResponse
ã® json()
ã¡ã½ãããå¼ã³åºãã¦ãã¬ã¹ãã³ã¹æ¬ä½ã®ã³ã³ãã³ãã JSON ã¨ãã¦åå¾ãããã®å¤ã®ä¸ã¤ããã°åºåãã¾ããfetch()
èªä½ã¨åæ§ã«ã json()
ã¯ã¬ã¹ãã³ã¹æ¬ä½ã®ã³ã³ãã³ãã«ã¢ã¯ã»ã¹ããä»ã®ãã¹ã¦ã®ã¡ã½ããã¨åæ§ã«éåæã§ãããã¨ã«æ³¨æãã¦ãã ããã
ãã®ãã¼ã¸ã®æ®ãã®é¨åã§ã¯ããã®ããã»ã¹ã®ãã¾ãã¾ãªæ®µéã詳ããè¦ã¦ããã¾ãã
ãªã¯ã¨ã¹ããè¡ããªã¯ã¨ã¹ããè¡ãã«ã¯ã fetch()
ãå¼ã³åºãã¦ã次ã®ãã®ã渡ãã¾ãã
URL
ã®ã¤ã³ã¹ã¿ã³ã¹ãªã©ã®ãªãã¸ã§ã¯ããããªãã¡ URL ãæ ¼ç´ããæååãçæããæååååã®ãããã®ãRequest
ã®ã¤ã³ã¹ã¿ã³ã¹ããã®ç¯ã§ã¯ããã使ç¨ãããªãã·ã§ã³ãè¦ã¦ããã¾ããæå®ããããã¹ã¦ã®ãªãã·ã§ã³ã«ã¤ãã¦ã¯ãfetch()
ãªãã¡ã¬ã³ã¹ãã¼ã¸ãåç
§ãã¦ãã ããã
æ¢å®ã§ã¯ãfetch()
㯠GET
ãªã¯ã¨ã¹ããè¡ãã¾ãããmethod
ãªãã·ã§ã³ã使ç¨ããã°ãå¥ã®ãªã¯ã¨ã¹ãã¡ã½ããã使ç¨ãããã¨ãã§ãã¾ãã
const response = await fetch("https://example.org/post", {
method: "POST",
// ...
});
mode
ãªãã·ã§ã³ã no-cors
ã«è¨å®ããã¦ããå ´åã method
㯠GET
ãPOST
ãHEAD
ã®ããããã§ãªããã°ãªãã¾ããã
ãªã¯ã¨ã¹ãæ¬ä½ã¯ãªã¯ã¨ã¹ãã®å
容ã§ããã¯ã©ã¤ã¢ã³ãããµã¼ãã¼ã«éããã®ã§ããGET
ãªã¯ã¨ã¹ãã§ã¯æ¬ä½ãå«ãããã¨ã¯ã§ãã¾ããããPOST
ã PUT
ãªã¯ã¨ã¹ãã®ããã«ãµã¼ãã¼ã«ã³ã³ãã³ããéä¿¡ãããªã¯ã¨ã¹ãã§ã¯æçã§ããä¾ãã°ããµã¼ãã¼ã«ãã¡ã¤ã«ãã¢ãããã¼ããããå ´åãPOST
ãªã¯ã¨ã¹ããè¡ãããªã¯ã¨ã¹ãæ¬ä½ã«ãã¡ã¤ã«ãå«ãããã¨ãã§ãã¾ãã
ãªã¯ã¨ã¹ãæ¬ä½ãè¨å®ããã«ã¯ãbody
ãªãã·ã§ã³ã¨ãã¦æ¸¡ãã¾ãã
const response = await fetch("https://example.org/post", {
body: JSON.stringify({ username: "example" }),
// ...
});
æ¬ä½ã¯ã以ä¸ããããã®åã®ã¤ã³ã¹ã¿ã³ã¹ã¨ãã¦æå®ã§ãã¾ãã
ArrayBuffer
TypedArray
DataView
Blob
File
URLSearchParams
FormData
ã¬ã¹ãã³ã¹æ¬ä½ã¨åæ§ã«ããªã¯ã¨ã¹ãæ¬ä½ã¯ã¹ããªã¼ã ã§ããããªã¯ã¨ã¹ãã使ããã¨ã¹ããªã¼ã ãèªã¿è¾¼ãã®ã§ããªã¯ã¨ã¹ããæ¬ä½ãå«ãå ´åã2 å使ãããã¨ã¯ã§ããªããã¨ã«æ³¨æãã¦ãã ããã
const request = new Request("https://example.org/post", {
method: "POST",
body: JSON.stringify({ username: "example" }),
});
const response1 = await fetch(request);
console.log(response1.status);
// ä¾å¤ãçºç: "Body has already been consumed."
const response2 = await fetch(request);
console.log(response2.status);
ãã®ä»£ããã«ããªã¯ã¨ã¹ããéä¿¡ããåã«è¤è£½ã使ããããå¿ è¦ãããã¾ãã
const request1 = new Request("https://example.org/post", {
method: "POST",
body: JSON.stringify({ username: "example" }),
});
const request2 = request1.clone();
const response1 = await fetch(request1);
console.log(response1.status);
const response2 = await fetch(request2);
console.log(response2.status);
詳ããã¯ãããã¯ãã妨害ãããã¹ããªã¼ã ãåç §ãã¦ãã ããã
ãããã¼ã®è¨å®ãªã¯ã¨ã¹ããããã¼ã¯ããªã¯ã¨ã¹ãã«é¢ããæ
å ±ããµã¼ãã¼ã«ä¸ãã¾ããä¾ãã° Content-Type
ãããã¼ã¯ããªã¯ã¨ã¹ãæ¬ä½ã®å½¢å¼ããµã¼ãã¼ã«æç¤ºãã¾ããå¤ãã®ãããã¼ã¯ãã©ã¦ã¶ã¼ãèªåçã«è¨å®ããã¹ã¯ãªããã§ã¯è¨å®ã§ãã¾ããããããã¯ç¦æ¢ãªã¯ã¨ã¹ããããã¼ã¨å¼ã°ãã¦ãã¾ãã
ãªã¯ã¨ã¹ããããã¼ãè¨å®ããã«ã¯ãheaders
ãªãã·ã§ã³ã«å²ãå½ã¦ã¦ãã ããã
ããã«ã¯ ãããã¼å: ãããã¼å¤
ã®å½¢ã§ããããã£ãæ ¼ç´ãããªãã¸ã§ã¯ããªãã©ã«ã渡ããã¨ãã§ãã¾ãã
const response = await fetch("https://example.org/post", {
headers: {
"Content-Type": "application/json",
},
// .,.
});
ãããã¯ãHeaders
ãªãã¸ã§ã¯ããæ§ç¯ããHeaders.append()
ã使ç¨ãã¦ãã®ãªãã¸ã§ã¯ãã«ãããã¼ã追å ããHeaders
ãªãã¸ã§ã¯ãã headers
ãªãã·ã§ã³ã«å²ãå½ã¦ããã¨ãã§ãã¾ãã
const myHeaders = new Headers();
myHeaders.append("Content-Type", "application/json");
const response = await fetch("https://example.org/post", {
headers: myHeaders,
// .,.
});
mode
ãªãã·ã§ã³ã no-cors
ã«è¨å®ããã¦ããå ´åãCORS ã»ã¼ããªã¹ããªã¯ã¨ã¹ããããã¼ã®ã¿ãè¨å®ãããã¨ãã§ãã¾ãã
method
ãbody
ãheaders
ãªãã·ã§ã³ãçµã¿åããããã¨ã§ãPOST ãªã¯ã¨ã¹ããä½ããã¨ãã§ãã¾ãã
const myHeaders = new Headers();
myHeaders.append("Content-Type", "application/json");
const response = await fetch("https://example.org/post", {
method: "POST",
body: JSON.stringify({ username: "example" }),
headers: myHeaders,
});
ãªãªã¸ã³éãªã¯ã¨ã¹ããè¡ã
ãªãªã¸ã³éã®ãªã¯ã¨ã¹ããã§ãããã©ãã㯠mode
ãªãã·ã§ã³ã®å¤ã§æ±ºã¾ãã¾ãããã㯠cors
ãno-cors
ãsame-origin
ã® 3 ã¤ã®å¤ã®ãããããåãã¾ãã
æ¢å®ã§ã¯ mode
㯠cors
ã«è¨å®ããããªã¯ã¨ã¹ãããªãªã¸ã³ãã¾ãããã®ã§ããã°ããªãªã¸ã³éãªã½ã¼ã¹å
±æ (CORS) ã®ä»çµã¿ã使ç¨ãããã¨ãæå³ãã¦ãã¾ããããã¯ä»¥ä¸ã®ãã¨ãæå³ãã¦ãã¾ãã
Access-Control-Allow-Origin
ãããã¼ã§å¿çããªããã°ãªãã¾ãããmode
ã same-origin
ã«è¨å®ããã¨ããªãªã¸ã³éã®ãªã¯ã¨ã¹ããå®å
¨ã«ç¦æ¢ãã¾ãã
mode
ã no-cors
ã«è¨å®ããã¨ããªã¯ã¨ã¹ãã¯åç´ãªãªã¯ã¨ã¹ãã§ãªãã¾ãããããã«ãããè¨å®ãããããã¼ã¯å¶éãããã¡ã½ãã㯠GET
ãHEAD
ãPOST
ã«å¶éããã¾ãã
è³æ ¼æ å ±ã¨ã¯ã¯ããã¼ãTLS ã¯ã©ã¤ã¢ã³ãè¨¼ææ¸ãã¾ãã¯ã¦ã¼ã¶ã¼åã¨ãã¹ã¯ã¼ããæ ¼ç´ããèªè¨¼ãããã¼ã®ãã¨ã§ãã
ãã©ã¦ã¶ã¼ãè³æ ¼æ
å ±ãéä¿¡ãããã©ãããããã³ Set-Cookie
ã¬ã¹ãã³ã¹ãããã¼ãå°éãããã©ãããå¶å¾¡ããã«ã¯ãcredentials
ãªãã·ã§ã³ãè¨å®ãã¾ãã
omit
: ãªã¯ã¨ã¹ãã«è³æ ¼æ
å ±ãéä¿¡ããããã¬ã¹ãã³ã¹ã«è³æ ¼æ
å ±ãå«ããããã¾ãããsame-origin
ï¼æ¢å®å¤ï¼: åä¸ãªãªã¸ã³ã®ãªã¯ã¨ã¹ãã«å¯¾ãã¦ã®ã¿è³æ ¼æ
å ±ãéä¿¡ããå«ãã¾ããinclude
: ãªãªã¸ã³ãã¾ããã å ´åã§ãã£ã¦ã常ã«è³æ ¼æ
å ±ãå«ãã¾ããã¯ããã¼ã® SameSite
屿§ã Strict
ã¾ã㯠Lax
ã«è¨å®ããã¦ããå ´åãcredentials
ã include
ã«è¨å®ããã¦ãã¦ããã¯ããã¼ã¯ãµã¤ããã¾ããã§éä¿¡ãããªããã¨ã«æ³¨æãã¦ãã ããã
ãã®ããããã¨ã credentials
ã include
ã«è¨å®ããã¦ãã¦ãããµã¼ãã¼ã¯ã¬ã¹ãã³ã¹ã« Access-Control-Allow-Credentials
ãããã¼ãè¨è¼ãããã¨ã§ãè³æ ¼æ
å ±ãå«ãããã¨ã«åæããªããã°ãªãã¾ãããããã«ããã®ç¶æ³ã§ã¯ãµã¼ãã¼ã¯ Access-Control-Allow-Origin
ã¬ã¹ãã³ã¹ãããã¼ã§ã¯ã©ã¤ã¢ã³ãã®å
ã®ãµã¼ãã¼ãæç¤ºçã«æå®ããªããã°ãªãã¾ããï¼ã¤ã¾ãã*
ã¯è¨±å¯ããã¾ããï¼ã
ã¤ã¾ããcredentials
ã include
ã«è¨å®ããã¦ãã¦ããªã¯ã¨ã¹ãããªãªã¸ã³ãã¾ããå ´åãæ¬¡ã®ããã«ãªãã¾ãã
ãªã¯ã¨ã¹ãã åç´ãªã¯ã¨ã¹ãã®å ´åããªã¯ã¨ã¹ãã¯è³æ ¼æ
å ±ã¨å
±ã«éä¿¡ããã¾ããããµã¼ãã¼ã¯ Access-Control-Allow-Credentials
㨠Access-Control-Allow-Origin
ã¬ã¹ãã³ã¹ãããã¼ãè¨å®ããªããã°ãªãã¾ããããµã¼ãã¼ãæ£ãããããã¼ãè¨å®ããå ´åãè³æ ¼æ
å ±ãå«ãã¬ã¹ãã³ã¹ãå¼ã³åºãå
ã«é
éããã¾ãã
ãªã¯ã¨ã¹ããåç´ãªãªã¯ã¨ã¹ãã§ãªãå ´åããã©ã¦ã¶ã¼ã¯è³æ ¼æ
å ±ãªãã®ããªãã©ã¤ããªã¯ã¨ã¹ããéä¿¡ãããµã¼ãã¼ã¯ Access-Control-Allow-Credentials
㨠Access-Control-Allow-Origin
ã¬ã¹ãã³ã¹ãããã¼ãè¨å®ããªããã°ããã©ã¦ã¶ã¼ã¯å¼ã³åºãå
ã«ãããã¯ã¼ã¯ã¨ã©ã¼ãè¿ãã¾ãããµã¼ãã¼ãæ£ãããããã¼ãè¨å®ããå ´åããã©ã¦ã¶ã¼ã¯è³æ ¼æ
å ±ãå«ãæ¬å½ã®ãªã¯ã¨ã¹ãã«ç¶ããè³æ ¼æ
å ±ãå«ãæ¬å½ã®ã¬ã¹ãã³ã¹ãå¼ã³åºãå
ã«éãã¾ãã
Request
ãªãã¸ã§ã¯ãã®ä½æ
Request()
ã³ã³ã¹ãã©ã¯ã¿ã¼ã¯ fetch()
èªä½ã¨åã弿°ãåãã¾ããããã¯ããªãã·ã§ã³ã fetch()
ã«æ¸¡ã代ããã«ãåããªãã·ã§ã³ã Request()
ã³ã³ã¹ãã©ã¯ã¿ã¼ã«æ¸¡ãã¦ããã®ãªãã¸ã§ã¯ãã fetch()
ã«æ¸¡ããã¨ãã§ããã¨ãããã¨ã§ãã
ä¾ãã°ã次ã®ãããªã³ã¼ããç¨ã㦠fetch()
ã«ãªãã·ã§ã³ã渡ããã¨ã§ POST ãªã¯ã¨ã¹ããè¡ããã¨ãã§ãã¾ãã
const myHeaders = new Headers();
myHeaders.append("Content-Type", "application/json");
const response = await fetch("https://example.org/post", {
method: "POST",
body: JSON.stringify({ username: "example" }),
headers: myHeaders,
});
ããããåã弿°ã Request()
ã³ã³ã¹ãã©ã¯ã¿ã¼ã«æ¸¡ãããã«æ¸ãæãããã¨ãã§ãã¾ãã
const myHeaders = new Headers();
myHeaders.append("Content-Type", "application/json");
const myRequest = new Request("https://example.org/post", {
method: "POST",
body: JSON.stringify({ username: "example" }),
headers: myHeaders,
});
const response = await fetch(myRequest);
ããã¯ã2 ã¤ç®ã®å¼æ°ã使ç¨ãã¦ããããã£ã®ä¸é¨ã夿´ããªããã å¥ã®ãªã¯ã¨ã¹ããããªã¯ã¨ã¹ãã使ãããã¨ãã§ããã¨ãããã¨ã§ãããã¾ãã
async function post(request) {
try {
const response = await fetch(request);
const result = await response.json();
console.log("æå:", result);
} catch (error) {
console.error("ã¨ã©ã¼:", error);
}
}
const request1 = new Request("https://example.org/post", {
method: "POST",
headers: {
"Content-Type": "application/json",
},
body: JSON.stringify({ username: "example1" }),
});
const request2 = new Request(request1, {
body: JSON.stringify({ username: "example2" }),
});
post(request1);
post(request2);
ãªã¯ã¨ã¹ãã®ä¸æ¢
ãªã¯ã¨ã¹ãã䏿¢ã§ããããã«ããã«ã¯ãAbortController
ã使ããAbortSignal
ããªã¯ã¨ã¹ãã® signal
ããããã£ã«å²ãå½ã¦ã¾ãã
ãªã¯ã¨ã¹ãã䏿¢ããã«ã¯ãã³ã³ããã¼ã©ã¼ã® abort()
ã¡ã½ãããå¼ã³åºãã¾ããfetch()
ãå¼ã³åºãã¨ãä¾å¤ AbortError
ãçºçãã¦ãããã¹ãæå¦ããã¾ãã
const controller = new AbortController();
const fetchButton = document.querySelector("#fetch");
fetchButton.addEventListener("click", async () => {
try {
console.log("ãã§ãããéå§");
const response = await fetch("https://example.org/get", {
signal: controller.signal,
});
console.log(`ã¬ã¹ãã³ã¹: ${response.status}`);
} catch (e) {
console.error(`ã¨ã©ã¼: ${e}`);
}
});
const cancelButton = document.querySelector("#cancel");
cancelButton.addEventListener("click", () => {
controller.abort();
console.log("ãã§ããã䏿¢");
});
fetch()
ãå±¥è¡ãããå¾ã§ãã¬ã¹ãã³ã¹æ¬ä½ãèªã¿è¾¼ãåã«ãªã¯ã¨ã¹ãã䏿¢ãããå ´åãã¬ã¹ãã³ã¹æ¬ä½ãèªã¿è¾¼ããã¨ãã㨠AbortError
ä¾å¤ãçºçãã¦æå¦ããã¾ãã
async function get() {
const controller = new AbortController();
const request = new Request("https://example.org/get", {
signal: controller.signal,
});
const response = await fetch(request);
controller.abort();
// 次ã®è¡ã§ã¯ `AbortError` ãçºç
const text = await response.text();
console.log(text);
}
ã¬ã¹ãã³ã¹ã®å¦ç
ãã©ã¦ã¶ã¼ããµã¼ãã¼ããã¬ã¹ãã³ã¹ã¹ãã¼ã¿ã¹ã¨ãããã¼ãåãåãã¨ããã«ï¼æ½å¨çã«ã¯ã¬ã¹ãã³ã¹æ¬ä½ãåãåãåã«ï¼ãfetch()
ãè¿ããããã¹ã¯ Response
ãªãã¸ã§ã¯ãã§å±¥è¡ããã¾ãã
fetch()
ãè¿ããããã¹ã¯ããããã¯ã¼ã¯ã¨ã©ã¼ã䏿£ãªã¹ãã¼ã ãªã©ã®ã¨ã©ã¼ã§ã¯æå¦ããã¾ãããããããµã¼ãã¼ã 404
ã®ãããªã¨ã©ã¼ã§å¿çããå ´åã fetch()
㯠Response
ã§å±¥è¡ãããã®ã§ãã¬ã¹ãã³ã¹æ¬ä½ãèªã¿è¾¼ãåã«ã¹ãã¼ã¿ã¹ã調ã¹ãå¿
è¦ãããã¾ãã
Response.status
ããããã£ã¯ã¹ãã¼ã¿ã¹ã³ã¼ããæ°å¤ã§æç¤ºããResponse.ok
ããããã£ã¯ã¹ãã¼ã¿ã¹ã 200 çªå°ã®å ´å㯠true
ãè¿ãã¾ãã
ãããããã¿ã¼ã³ã¯ãok
ã®å¤ã調ã¹ã¦ false
ãªãä¾å¤ãçºçããããã¨ã§ãã
async function getData() {
const url = "https://example.org/products.json";
try {
const response = await fetch(url);
if (!response.ok) {
throw new Error(`ã¬ã¹ãã³ã¹ã¹ãã¼ã¿ã¹: ${response.status}`);
}
// ...
} catch (error) {
console.error(error.message);
}
}
ã¬ã¹ãã³ã¹åã®ãã§ãã¯
ã¬ã¹ãã³ã¹ã«ã¯ type
ããããã£ãããã以ä¸ã®ããããã«ãªãã¾ãã
basic
: ãªã¯ã¨ã¹ããåä¸ãªãªã¸ã³ãªã¯ã¨ã¹ãã ã£ããcors
: ãªã¯ã¨ã¹ãããªãªã¸ã³éã® CORS ãªã¯ã¨ã¹ãã ã£ããopaque
: ãªã¯ã¨ã¹ã㯠no-cors
ã¢ã¼ãã§è¡ãããåç´ãªãªãªã¸ã³éãªã¯ã¨ã¹ãã ã£ããopaqueredirect
: ãªã¯ã¨ã¹ãã§ redirect
ãªãã·ã§ã³ã manual
ã«è¨å®ããã¦ããããµã¼ãã¼ããªãã¤ã¬ã¯ãã¹ãã¼ã¿ã¹ãè¿ãããåã¯ã¬ã¹ãã³ã¹ã«å ¥ãããå 容ãã以ä¸ã®ããã«æ±ºå®ãã¾ãã
åºæ¬ã¬ã¹ãã³ã¹ã¯ç¦æ¢ã¬ã¹ãã³ã¹ãããã¼åãªã¹ãã«ããã¬ã¹ãã³ã¹ãããã¼ãé¤å¤ãã¾ãã
CORS ã¬ã¹ãã³ã¹ã¯ CORS ã»ã¼ããªã¹ãã¬ã¹ãã³ã¹ãããã¼ãªã¹ãã®ã¬ã¹ãã³ã¹ãããã¼ã®ã¿ãå«ã¿ã¾ãã
ä¸éæãªã¬ã¹ãã³ã¹ã¨ä¸éæãªãªãã¤ã¬ã¯ãã¬ã¹ãã³ã¹ã¯ status
ã 0
ããããã¼ãªã¹ãã空ãããã¦æ¬ä½ã null
ã«ãªãã¾ãã
ãªã¯ã¨ã¹ãã¨åãããã«ãã¬ã¹ãã³ã¹ã«ã headers
ãªãã¸ã§ã¯ãã§ãã Headers
ããããã£ãããã ã¬ã¹ãã³ã¹åã«åºã¥ãé¤å¤ã«å¾ã£ã¦ãã¹ã¯ãªããã«å
¬éãããã¬ã¹ãã³ã¹ãããã¼ãæ ¼ç´ããã¾ãã
ãã®ä¸è¬çãªç¨éã¯ãæ¬ä½ãèªããã¨ããåã«ã³ã³ãã³ãåã調ã¹ããã¨ã§ãã
async function fetchJSON(request) {
try {
const response = await fetch(request);
const contentType = response.headers.get("content-type");
if (!contentType || !contentType.includes("application/json")) {
throw new TypeError("æ®å¿µãåä¿¡ããã®ã¯ JSON ã§ã¯ãªãã£ãï¼");
}
// ãã以å¤ã®å ´åãæ¬ä½ã JSON ã¨ãã¦èªã¿åãã
} catch (error) {
console.error("ã¨ã©ã¼:", error);
}
}
ã¬ã¹ãã³ã¹æ¬ä½ã®èªã¿åã
Response
ã¤ã³ã¿ã¼ãã§ã¤ã¹ã«ã¯ãæ¬ä½ã®ã³ã³ãã³ãå
¨ä½ãæ§ã
ãªå½¢å¼ã§åå¾ããããã®ã¡ã½ãããããã¾ãã
ãããã¯ãã¹ã¦éåæã¡ã½ããã§ãæ¬ä½ã®ã³ã³ãã³ãã§å±¥è¡ããã Promise
ãè¿ãã¾ãã
ãã®ä¾ã§ã¯ãç»åãèªã¿åã£ã¦ Blob
ã¨ãã¦èªã¿è¾¼ã¿ãããã使ç¨ãã¦ãªãã¸ã§ã¯ã URL ã使ãããã¨ãã§ãã¾ãã
const image = document.querySelector("img");
const url = "flowers.jpg";
async function setImage() {
try {
const response = await fetch(url);
if (!response.ok) {
throw new Error(`ã¬ã¹ãã³ã¹ã¹ãã¼ã¿ã¹: ${response.status}`);
}
const blob = await response.blob();
const objectURL = URL.createObjectURL(blob);
image.src = objectURL;
} catch (e) {
console.error(e);
}
}
ãã®ã¡ã½ããã§ã¯ãã¬ã¹ãã³ã¹æ¬ä½ãé©åãªå½¢å¼ã§ãªãå ´åã«ä¾å¤ãçºçãã¾ããä¾ãã°ãJSONã¨ãã¦è§£éã§ããªãã¬ã¹ãã³ã¹ã«å¯¾ã㦠json()
ãå¼ã³åºããå ´åãªã©ã§ãã
ãªã¯ã¨ã¹ãæ¬ä½ã¨ã¬ã¹ãã³ã¹æ¬ä½ã¯ãå®éã«ã¯ ReadableStream
ãªãã¸ã§ã¯ãã§ãããããããèªãã¨ãã¯å¸¸ã«ã³ã³ãã³ããã¹ããªã¼ãã³ã°ãã¦ãã¾ããããã¯ã¡ã¢ãªã¼å¹çãè¯ããªãã¾ããå¼ã³åºãå´ã json()
ã®ãããªã¡ã½ããã使ç¨ãã¦ã¬ã¹ãã³ã¹ãåå¾ããåã«ã ãã©ã¦ã¶ã¼ãã¬ã¹ãã³ã¹å
¨ä½ãã¡ã¢ãªã¼ã«ãããã¡ãªã³ã°ããå¿
è¦ããªãããã§ãã
ã¾ããããã¯å¼ã³åºãå´ãã³ã³ãã³ããåä¿¡ããã¨ãã«å¢å ããªããå¦çã§ãããã¨ãæå³ãã¦ãã¾ãã
ä¾ãã°ã大ããªããã¹ããã¡ã¤ã«ãèªã¿åã£ã¦ããããä½ãæ¹æ³ã§å¦çããããã¦ã¼ã¶ã¼ã«è¡¨ç¤ºããããã GET
ãªã¯ã¨ã¹ããèãã¦ã¿ã¾ãããã
const url = "https://www.example.org/a-large-file.txt";
async function fetchText(url) {
try {
const response = await fetch(url);
if (!response.ok) {
throw new Error(`ã¬ã¹ãã³ã¹ã¹ãã¼ã¿ã¹: ${response.status}`);
}
const text = await response.text();
console.log(text);
} catch (e) {
console.error(e);
}
}
ä¸è¨ã®ããã« Response.text()
ã使ç¨ãããã¨ãã§ãã¾ããããã¡ã¤ã«å
¨ä½ãåä¿¡ããã¾ã§å¾
ããªããã°ãªãã¾ããã
代ããã«ã¬ã¹ãã³ã¹ãã¹ããªã¼ãã³ã°ããã¨ãæ¬ä½ããããã¯ã¼ã¯ããåä¿¡ããå¡ã®ã¾ã¾ã§å¦çãããã¨ãã§ãã¾ãã
const url = "https://www.example.org/a-large-file.txt";
async function fetchTextAsStream(url) {
try {
const response = await fetch(url);
if (!response.ok) {
throw new Error(`ã¬ã¹ãã³ã¹ã¹ãã¼ã¿ã¹: ${response.status}`);
}
const stream = response.body.pipeThrough(new TextDecoderStream());
for await (const value of stream) {
console.log(value);
}
} catch (e) {
console.error(e);
}
}
ãã®ä¾ã§ã¯ãiterate asynchronously ã¹ããªã¼ã ãå¦çããå°çããããããã®å¡ãå¦çãã¦ãã¾ãã
ãã®ããã«æ¬ä½ã«ç´æ¥ã¢ã¯ã»ã¹ããã¨ãã¬ã¹ãã³ã¹ã®çã®ãã¤ãåãåå¾ãããããèªåã§å¤æããªããã°ãªããªããã¨ã«æ³¨æãã¾ãããããã®å ´åãReadableStream.pipeThrough()
ãå¼ã³åºã㦠TextDecoderStream
ã«ã¬ã¹ãã³ã¹ãéããUTF-8 ã¨ã³ã³ã¼ããããæ¬ä½ãã¼ã¿ãããã¹ãã¨ãã¦ãã³ã¼ããã¾ãã
ä¸è¨ã®ä¾ã§ã¯ãããã¹ããªã½ã¼ã¹ãåå¾ãããããè¡ãã¨ã«å¦çããæ£è¦è¡¨ç¾ã使ã£ã¦è¡æ«ãæ¢ãã¦ãã¾ããåãããããããã«ãããã¹ã㯠UTF-8 ãæ³å®ããèªã¿åãã¨ã©ã¼ã¯å¦çãã¾ããã
async function* makeTextFileLineIterator(fileURL) {
const response = await fetch(fileURL);
const reader = response.body.pipeThrough(new TextDecoderStream()).getReader();
let { value: chunk, done: readerDone } = await reader.read();
chunk = chunk || "";
const newline = /\r?\n/gm;
let startIndex = 0;
let result;
while (true) {
const result = newline.exec(chunk);
if (!result) {
if (readerDone) break;
const remainder = chunk.substr(startIndex);
({ value: chunk, done: readerDone } = await reader.read());
chunk = remainder + (chunk || "");
startIndex = newline.lastIndex = 0;
continue;
}
yield chunk.substring(startIndex, result.index);
startIndex = newline.lastIndex;
}
if (startIndex < chunk.length) {
// Last line didn't end in a newline char
yield chunk.substring(startIndex);
}
}
async function run(urlOfFile) {
for await (const line of makeTextFileLineIterator(urlOfFile)) {
processLine(line);
}
}
function processLine(line) {
console.log(line);
}
run("https://www.example.org/a-large-file.txt");
ããã¯ãã妨害ãããã¹ããªã¼ã
ãªã¯ã¨ã¹ãæ¬ä½ã¨ã¬ã¹ãã³ã¹æ¬ä½ãã¹ããªã¼ã ã§ãããã¨ã®çµæã¯ä»¥ä¸ã®ã¨ããã§ãï¼
ReadableStream.getReader()
ã使ç¨ãã¦ã¹ããªã¼ã ã«ãªã¼ãã¼ãæ¥ç¶ããã¦ããå ´åããã®ã¹ããªã¼ã ã¯ããã¯ãããä»ã®èª°ãã¹ããªã¼ã ãèªããã¨ãã§ãã¾ãããããã¯ãåãã¬ã¹ãã³ã¹ï¼ã¾ãã¯ãªã¯ã¨ã¹ãï¼æ¬ä½ãè¤æ°åèªã¿åããã¨ã¯ä¸å¯è½ã§ããã¨ãããã¨ã§ãã
async function getData() {
const url = "https://example.org/products.json";
try {
const response = await fetch(url);
if (!response.ok) {
throw new Error(`ã¬ã¹ãã³ã¹ã¹ãã¼ã¿ã¹: ${response.status}`);
}
const json1 = await response.json();
const json2 = await response.json(); // ä¾å¤ãçºç
} catch (error) {
console.error(error.message);
}
}
æ¬ä½ãè¤æ°åèªã¿è¾¼ãå¿
è¦ãããå ´åã¯ãæ¬ä½ãèªã¿è¾¼ãåã« Response.clone()
ãå¼ã³åºãå¿
è¦ãããã¾ãã
async function getData() {
const url = "https://example.org/products.json";
try {
const response1 = await fetch(url);
if (!response1.ok) {
throw new Error(`ã¬ã¹ãã³ã¹ã¹ãã¼ã¿ã¹: ${response1.status}`);
}
const response2 = response1.clone();
const json1 = await response1.json();
const json2 = await response2.json();
} catch (error) {
console.error(error.message);
}
}
ããã¯ãµã¼ãã¹ã¯ã¼ã«ã¼ã®ãªãã©ã¤ã³ãã£ãã·ã¥å®è£ ã§ãããããã¿ã¼ã³ã§ãããµã¼ãã¹ã¯ã¼ã«ã¼ã¯ã¢ããªã«ã¬ã¹ãã³ã¹ãè¿ãã¾ãããåæã«ã¬ã¹ãã³ã¹ããã£ãã·ã¥ãããã¨ãæãã§ãã¾ãããã®ãããã¬ã¹ãã³ã¹ãè¤è£½ãã¦å ãè¿ããè¤è£½ããã£ãã·ã¥ãã¾ãã
async function cacheFirst(request) {
const cachedResponse = await caches.match(request);
if (cachedResponse) {
return cachedResponse;
}
try {
const networkResponse = await fetch(request);
if (networkResponse.ok) {
const cache = await caches.open("MyCache_1");
cache.put(request, networkResponse.clone());
}
return networkResponse;
} catch (error) {
return Response.error();
}
}
self.addEventListener("fetch", (event) => {
if (precachedResources.includes(url.pathname)) {
event.respondWith(cacheFirst(event.request));
}
});
é¢é£æ
å ±
RetroSearch is an open source project built by @garambo | Open a GitHub Issue
Search and Browse the WWW like it's 1997 | Search results from DuckDuckGo
HTML:
3.2
| Encoding:
UTF-8
| Version:
0.7.4