Baseline Widely available *
ãã®ã¬ã¤ãã§ã¯ãã¦ã§ããµã¤ãã¨ãµã¼ãã¼ã®éã§ãã¼ã¿äº¤æãããããã«ã XMLHttpRequest
ã使ç¨ã㦠HTTP ãªã¯ã¨ã¹ããçºè¡ããæ¹æ³ãç´¹ä»ãã¾ãã
XMLHttpRequest
ã®ãããã使ç¨ä¾ããã£ã¨åããã«ãã使ç¨ä¾ãå«ã¾ãã¦ãã¾ãã
HTTP ãªã¯ã¨ã¹ããéãã«ã¯ã
XMLHttpRequest
ãªãã¸ã§ã¯ãã使ãããã©ã³ã¶ã¯ã·ã§ã³ãå®äºããã¨ããªãã¸ã§ã¯ãã«ã¯çµæã® HTTP ã¹ãã¼ã¿ã¹ã³ã¼ããã¬ã¹ãã³ã¹ã®æ¬æãªã©ã®æçãªæ å ±ãæ ¼ç´ããã¾ãã
function reqListener() {
console.log(this.responseText);
}
const req = new XMLHttpRequest();
req.addEventListener("load", reqListener);
req.open("GET", "http://www.example.org/example.txt");
req.send();
ãªã¯ã¨ã¹ãã®ç¨®é¡
XMLHttpRequest
ã«ãã£ã¦ä½æããããªã¯ã¨ã¹ãã¯ãéåæã¾ãã¯åæã®ããããã®æ¹æ³ã§ãã¼ã¿ãåå¾ãããã¨ãå¯è½ã§ãããªã¯ã¨ã¹ããã©ã¡ãã®æ¹æ³ã§è¡ããã¯ã XMLHttpRequest.open()
ã¡ã½ããã®ãªãã·ã§ã³ã® async
弿°ï¼ç¬¬ 3 弿°ï¼ã§æç¤ºãããã¨ãã§ãã¾ãããã®å¼æ°ã true
ã«ããããæå®ããªããã° XMLHttpRequest
ã¯éåæã§å¦çããããã以å¤ã ã¨åæçã«æ±ããã¾ãããããäºã¤ã®ç¨®é¡ã®ãªã¯ã¨ã¹ãã«é¢ãã詳細ããã³ä½¿ç¨ä¾ã¯ãåæããã³éåæãªã¯ã¨ã¹ãã®ãã¼ã¸ãåç
§ãã¦ãã ãããã¦ã§ãã¯ã¼ã«ã¼ä»¥å¤ã§ã¯åæãªã¯ã¨ã¹ãã使ç¨ããªãã§ãã ããã
ã¡ã¢: ã³ã³ã¹ãã©ã¯ã¿ã¼é¢æ° XMLHttpRequest
㯠XML ææ¸ã«éå®ããã¦ãã¾ããã "XML" ã§å§ã¾ã£ã¦ããã®ã¯ãããã使ãããã¨ãã«éåæãã¼ã¿äº¤æã«ä½¿ç¨ããã¦ãã主è¦ãªå½¢å¼ã XML ã§ãã£ãããã§ãã
XMLHttpRequest()
ã³ã³ã¹ãã©ã¯ã¿ã¼ã«å®ç¾©ããã¦ãã response 屿§ã¯ä½ç¨®é¡ããããã¾ãããããã¯ã¯ã©ã¤ã¢ã³ãã« XMLHttpRequest
ã«ã¬ã¹ãã³ã¹ã®ã¹ãã¼ã¿ã¹ã«é¢ããéè¦ãªæ
å ±ãä½ãããã«æç¤ºãã¾ããããã¹ã以å¤ã®ã¬ã¹ãã³ã¹åãæ±ãå ´åã¯ãå¾ã®ç¯ã§æ¦èª¬ããæä½ãè§£æãå
¥ããã¨ãããããããã¾ããã
ãªã¢ã¼ãã® XML ææ¸ã®ã³ã³ãã³ããå¾ãããã« XMLHttpRequest
ã使ãå ´åã responseXML
ããããã£ãè§£éæ¸ã¿ã® XML ææ¸ãå«ã DOM ãªãã¸ã§ã¯ãã¨ãªãã¾ããããã«ãã£ã¦ãæä½ãè§£æãé£ãããªãå¯è½æ§ãããã¾ãããã® XML ææ¸ãè§£æããã«ã¯ä¸»ãª 4 ã¤ã®æ¹æ³ãããã¾ãã
XMLSerializer
ã使ã£ã¦ DOM ããªã¼ãæååããã¡ã¤ã«ã«ã·ãªã¢ã©ã¤ãºãããRegExp
ã使ããã¨ãã§ãã¾ããæ¹è¡ã RegExp
ã§ã¹ãã£ã³ããå ´åã«ãæ¹è¡ãé¤å»ããæ¹ãããè¦ãããã¨ãããã¾ããã XML ã³ã¼ããå°ãã§ã夿´ãããã¨ãã¡ã½ããã¯å¤±æããã¡ãªããããã®ã¡ã½ããã¯ãæå¾ã®ææ®µãã§ããã¡ã¢: XMLHttpRequest
㯠responseXML
ããããã£ã使ç¨ãããã¨ã«ãã£ã¦ã HTML ãè§£éã§ããããã«ãªãã¾ããããã®æ¹æ³ã«ã¤ãã¦å¦ã¶ã«ã¯ã XMLHttpRequest ã«ããã HTML ã®æ±ãã«ã¤ãã¦ã®è¨äºããèªã¿ãã ããã
XMLHttpRequest
ã使ã£ã¦ãªã¢ã¼ã HTML ã¦ã§ããã¼ã¸ã®ã³ã³ãã³ããåå¾ããå ´åã responseText
ããããã£ã¯çã® HTML ãå
¥ã£ãæååã§ããããã¯æä½ãè§£æãé£ãããã¨ã示ãã¦ãã¾ãããã®çã® HTML æååãåæãè§£æããã«ã¯ã主㫠3 ã¤ã®æ¹æ³ãããã¾ãã
XMLHttpRequest.responseXML
ããããã£ã使ç¨ãããfragment.body.innerHTML
ãéãã¦ã³ã³ãã³ãã«æ¿å
¥ãããã®ãã©ã°ã¡ã³ãã® DOM ãèµ°æ»ãããresponseText
ã®ä¸èº«ã常ã«åãã£ã¦ããå ´å㯠RegExp
ã使ããã¨ãã§ãã¾ããæ¹è¡ã RegExp ã§ã¹ãã£ã³ããå ´åã«ãæ¹è¡ãé¤å»ããæ¹ãããè¦ãããã¨ãããã¾ããã HTML ææ¸ãå°ãã§ã夿´ãããã¨ãã¡ã½ããã¯å¤±æããã¡ãªããããã®ã¡ã½ããã¯ãæå¾ã®ææ®µãã§ããXMLHttpRequest
ã¯ããã¹ããã¼ã¿ã®éåä¿¡ã«æããã使ããã¾ããããã¤ããªã¼ã³ã³ãã³ãã®éåä¿¡ã«ã使ãã¾ãã XMLHttpRequest
ã®ã¬ã¹ãã³ã¹ããã¤ããªã¼ãã¼ã¿éä¿¡ã«å¼·å¶ããããã®ãã¹ããããã¡ã½ãããããã¤ãããã¾ãããã®ä¸ã«ã¯ XMLHttpRequest
ãªãã¸ã§ã¯ãã® overrideMimeType()
ã¡ã½ãããæ´»ç¨ãã¦ä½¿ãã解決æ³ã¨ãã¦ãããã®ãå
¥ã£ã¦ãã¾ãã
const req = new XMLHttpRequest();
req.open("GET", url);
// ãã¤ããªã¼æååã¨ãã¦æªå¦çã®ãã¼ã¿ãåå¾ãã
req.overrideMimeType("text/plain; charset=x-user-defined");
/* ⦠*/
ãããããã£ã¨æ°ãããã¯ããã¯ã使ç¨ã§ãã¾ãã responseType
屿§ãããã¤ãã®è¿½å ã®ã³ã³ãã³ãåã«å¯¾å¿ããããã«ãªã£ãã®ã§ããã¤ããªã¼ãã¼ã¿ã®éä¿¡ãåä¿¡ããã£ã¨ç°¡åã«ãªãã¾ããã
ä¾ãã°ãã®ã¹ããããã§ã¯ã responseType
ã« "arraybuffer
" ã使ç¨ãã¦ãçã®ãã¤ããªã¼ãã¼ã¿ãæ ¼ç´ã§ãã ArrayBuffer
ãªãã¸ã§ã¯ãã«ãªã¢ã¼ãã³ã³ãã³ããåå¾ãã¦ãã¾ãã
const req = new XMLHttpRequest();
req.onload = (e) => {
const arraybuffer = req.response; // responseText ã§ã¯ãªã
/* ⦠*/
};
req.open("GET", url);
req.responseType = "arraybuffer";
req.send();
ãã®ä»ã®ä¾ã¯ããã¤ããªã¼ãã¼ã¿ã®éä¿¡ã¨åä¿¡ ãã¼ã¸ã確èªãã¦ãã ããã
鲿ã®ç£è¦XMLHttpRequest
ã¯ããªã¯ã¨ã¹ããå¦çããã¦ããéã«çºçããæ§ã
ãªã¤ãã³ããå¾
åãããæ©è½ãæä¾ãã¦ãã¾ããããã«ã¯å®æçãªé²æã®éç¥ãã¨ã©ã¼ã®éç¥ããªã©ãå«ã¾ãã¾ãã
XMLHttpRequest
ã®è»¢éãç£è¦ãã DOM progress
ã¤ãã³ãã®å¯¾å¿ã¯ã progress events 仿§ã«å¾ãã¾ãããã®ã¤ãã³ã㯠ProgressEvent
ã¤ã³ã¿ã¼ãã§ã¤ã¹ãå®è£
ãã¦ãã¾ããé²è¡ä¸ã®è»¢éã®ç¶æ
ãç¹å®ããããã«ç£è¦ãããã¨ãã§ããå®éã®ã¤ãã³ãã¯ã以ä¸ã®éãã§ãã
progress
å忏ã¿ã®ãã¼ã¿éãå¤åããã¨ãã
load
転éãå®äºããã¨ãããã¹ã¦ã®ãã¼ã¿ã response
ã«å
¥ã£ã¦ãã¾ãã
const req = new XMLHttpRequest();
req.addEventListener("progress", updateProgress);
req.addEventListener("load", transferComplete);
req.addEventListener("error", transferFailed);
req.addEventListener("abort", transferCanceled);
req.open();
// â¦
// ãµã¼ãã¼ããã¯ã©ã¤ã¢ã³ãã¸ã®è»¢éã®é²æ (ãã¦ã³ãã¼ã)
function updateProgress(event) {
if (event.lengthComputable) {
const percentComplete = (event.loaded / event.total) * 100;
// â¦
} else {
// å
¨ä½ã®é·ãã䏿ãªããã鲿æ
å ±ãè¨ç®ã§ããªã
}
}
function transferComplete(evt) {
console.log("転éãå®äºãã¾ããã");
}
function transferFailed(evt) {
console.log("ãã¡ã¤ã«ã®è»¢éä¸ã«ã¨ã©ã¼ãçºçãã¾ããã");
}
function transferCanceled(evt) {
console.log("ã¦ã¼ã¶ã¼ã転éããã£ã³ã»ã«ãã¾ããã");
}
3-6 è¡ç®ã§ XMLHttpRequest
ã使ã£ã¦ãã¼ã¿è»¢éãè¡ãã¨ãã«éãããè²ã
ãªã¤ãã³ãã¸ã®ããã®ã¤ãã³ããªã¹ãã¼ã追å ãã¦ãã¾ãã
ã¡ã¢: ã¤ãã³ããªã¹ãã¼ã¯ãªã¯ã¨ã¹ãã® open()
ãå¼ã³åºãåã«è¿½å ããå¿
è¦ãããã¾ããããããªã㨠progress
ã¤ãã³ãã¯çºçãã¾ããã
ãã®ä¾ã§ã¯ updateProgress()
颿°ã§æå®ããã鲿ã¤ãã³ããã³ãã©ã¼ã¯ãã¤ãã³ãã® total
ããã³ loaded
ãã£ã¼ã«ãã§ã転éãã¹ãç·ãã¤ãæ°ã¨ããã¾ã§ã«è»¢éãããã¤ãæ°ãåãåãã¾ãããã ããlengthComputable
ãã£ã¼ã«ãã false ã®å ´åãåè¨ã®é·ãã¯åãããªãã®ã§ 0 ã«ãªãã¾ãã
鲿ã¤ãã³ãã¯ãã¦ã³ãã¼ããã¢ãããã¼ãã®ä¸¡æ¹ã«åå¨ãã¾ãããã¦ã³ãã¼ãã®ã¤ãã³ãã¯ãä¸è¨ãµã³ãã«ã®ããã«ãXMLHttpRequest
ãªãã¸ã§ã¯ããã®ãã®ã§çºçãã¾ããã¢ãããã¼ãã®ã¤ãã³ãã¯ä¸è¨ã®ããã«ã XMLHttpRequest.upload
ãªãã¸ã§ã¯ãã§çºçãã¾ãã
const req = new XMLHttpRequest();
req.upload.addEventListener("progress", updateProgress);
req.upload.addEventListener("load", transferComplete);
req.upload.addEventListener("error", transferFailed);
req.upload.addEventListener("abort", transferCanceled);
req.open();
ã¡ã¢: 鲿ã¤ãã³ã㯠file:
ãããã³ã«ã§ã¯å©ç¨ã§ãã¾ããã
progress ã¤ãã³ãã¯ãåä¿¡ãããã¼ã¿ã®å¡ãã¨ã«çºçãã¾ãã progress ã¤ãã³ããçºè¡ãããåã«æå¾ã®ãã±ãããåä¿¡ãã¦æ¥ç¶ãéããããå ´åã«ã¯ãæå¾ã®å¡ã§ãçºçãã¾ãããã®å ´åã progress ã¤ãã³ãã¯ããã®ãã±ããã«å¯¾ã㦠load ã¤ãã³ããçºçããã¨ãã«èªåçã«çºè¡ããã¾ããããã§ã "progress" ã¤ãã³ããè¦ãã ãã§ã確å®ã«é²æãç£è¦ã§ããããã«ãªãã¾ããã
ãã¼ããçµãã 3 ã¤ã®æ¡ä»¶ï¼abort
, load
, error
ã®ããããï¼ã loadend
ã¤ãã³ãã§æ¤åºãããã¨ãã§ãã¾ãã
req.addEventListener("loadend", loadEnd);
function loadEnd(e) {
console.log(
"The transfer finished (although we don't know if it succeeded or not).",
);
}
注æç¹ã¨ãã¦ã loadend
ã¤ãã³ãã§åãåã£ãæ
å ±ãããã©ã®æ¡ä»¶ã§åä½ãçµäºããã®ãã確ãããæ¹æ³ã¯ããã¾ãããããããããã使ã£ã¦ãã¹ã¦ã®è»¢éçµäºã·ããªãªã«ã¦è¡ãå¿
è¦ã®ããã¿ã¹ã¯ãå¦çã§ãã¾ãã
function getHeaderTime() {
console.log(this.getResponseHeader("Last-Modified")); // æå¹ãª GMTString ã®æ¥ä»ã¾ã㯠null
}
const req = new XMLHttpRequest();
req.open(
"HEAD", // ãããã¼ã®ã¿ãå¿
è¦ã§ããã° HEAD ã使ç¨ãã
"yourpage.html",
);
req.onload = getHeaderTime;
req.send();
æçµæ´æ°æ¥ä»ãå¤ãã£ãæã«ä½ããã
ï¼ã¤ã®é¢æ°ãä½ã£ã¦ã¿ã¾ãããã
function getHeaderTime() {
const lastVisit = parseFloat(
window.localStorage.getItem(`lm_${this.filepath}`),
);
const lastModified = Date.parse(this.getResponseHeader("Last-Modified"));
if (isNaN(lastVisit) || lastModified > lastVisit) {
window.localStorage.setItem(`lm_${this.filepath}`, Date.now());
isFinite(lastVisit) && this.callback(lastModified, lastVisit);
}
}
function ifHasChanged(URL, callback) {
const req = new XMLHttpRequest();
req.open("HEAD" /* use HEAD - we only need the headers! */, URL);
req.callback = callback;
req.filepath = URL;
req.onload = getHeaderTime;
req.send();
}
ããã¦ãã¹ããã¾ãã
// Let's test the file "yourpage.html"
ifHasChanged("yourpage.html", function (modified, visit) {
console.log(
`The page '${this.filepath}' has been changed on ${new Date(
nModified,
).toLocaleString()}!`,
);
});
ç¾å¨ã®ãã¼ã¸ã夿´ããããã©ãããç¥ãããå ´åã¯ã document.lastModified
ã«ã¤ãã¦ã®è¨äºããèªã¿ãã ããã
ç¾å¨ã®ãã©ã¦ã¶ã¼ã¯ããªãªã¸ã³éãªã½ã¼ã¹å
±æ (Cross-Origin Resource Sharing, CORS) ãå®è£
ãããã¨ã§ãµã¤ãéãªã¯ã¨ã¹ãã«å¯¾å¿ãã¦ãã¾ãããµã¼ãã¼ãã¦ã§ãã¢ããªã±ã¼ã·ã§ã³ã®ãªãªã¸ã³ããã®ãªã¯ã¨ã¹ãã許å¯ããããã«æ§æããã¦ããå ´åã®ã¿ã XMLHttpRequest
ã¯åä½ãã¾ãããã以å¤ã®å ´åã¯ã INVALID_ACCESS_ERR
ä¾å¤ãæãããã¾ãã
ãã©ã¦ã¶ã¼éã§äºææ§ã®ããããã£ãã·ã¥ããã¤ãã¹ããã¢ããã¼ãã¯ã URL ã«ã¿ã¤ã ã¹ã¿ã³ãã追å ãããã¨ã§ãé©åã« "?" å㯠"&" ãä»ãå ãã¾ããä¾ãã°ä»¥ä¸ã®ããã«ãã¾ãã
http://example.com/bar.html -> http://example.com/bar.html?12345 http://example.com/bar.html?foobar=baz -> http://example.com/bar.html?foobar=baz&12345
ãã¼ã«ã«ã®ãã£ãã·ã¥ã¯ URL ã«ãã£ã¦ç´¢å¼ã¥ãããããããããã§ãã¹ã¦ã®ãªã¯ã¨ã¹ããåºæã®ãã®ã¨ãªããããã«ãã£ã¦ãã£ãã·ã¥ããã¤ãã¹ãã¾ãã
以ä¸ã®ã³ã¼ãã使ç¨ããã¨ãèªåçã« URL ã調æ´ãããã¨ãã§ãã¾ãã
const req = new XMLHttpRequest();
req.open("GET", url + (/\?/.test(url) ? "&" : "?") + new Date().getTime());
req.send(null);
ã»ãã¥ãªãã£
ãµã¤ãéã¹ã¯ãªãããæå¹ã«ããããã®æ¨å¥¨ãããæ¹æ³ã¯ã XMLHttpRequest ã¸ã®ã¬ã¹ãã³ã¹ã®ä¸ã§ HTTP ã® Access-Control-Allow-Origin
ãããã¼ã使ç¨ãããã¨ã§ãã
XMLHttpRequest ã status=0
ããã³ statusText=null
ãåä¿¡ãã¦çµäºããã¨ããªã¯ã¨ã¹ããå®è¡ãããã¨ã許å¯ããã¦ããªããã¨ãæå³ãã¾ããããã¯æªéä¿¡ (UNSENT
) ç¶æ
ã§ãããã®åå ã®å¤ãã¯ã XMLHttpRequest ã open()
ã®æã« XMLHttpRequest
ã®ãªãªã¸ã³ (XMLHttpRequest ã使ãããå ´æ) ã夿´ããããã¨ã«ãããã®ã§ããããã¯ä¾ãã°ã XMLHttpRequest ãæã£ããã¼ã¸ã§ onunload ã¤ãã³ããçºçããã¦ã£ã³ãã¦ãéãããã¨ãã¦ããæã« XMLHttpRequest ã使ãããã¦ã£ã³ãã¦ããã©ã¼ã«ã¹ã失ã£ã¦ä»ã®ã¦ã£ã³ãã¦ããã©ã¼ã«ã¹ãå¾ãã¨ãã«ãªã¯ã¨ã¹ãã®éä¿¡ï¼è¨ãæããã° open()
ï¼ãè¡ãªãããå ´åã«çºçãããã¨ãããã¾ãããã®åé¡ãé²ãæã广çãªæ¹æ³ã¯ãæ°ããã¦ã£ã³ãã¦ã® DOMActivate
ã¤ãã³ãã®ãªã¹ãã¼ãã unload
ã¤ãã³ããçºçããã¨ãã«è¨å®ãããã¨ã§ãã
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