「JavaScript/XMLHttpRequest」の版間の差分

削除された内容 追加された内容
Ef3 (トーク | 投稿記録)
→‎外部リンク: Feetch API を紹介したいが、その前に PROMISE の解説を書く必要がある
Ef3 (トーク | 投稿記録)
→‎XMLHttpRequest: イベントハンドリングを改善
11 行
== XMLHttpRequest ==
<syntaxhighlight lang="javascript">
varconst req = new XMLHttpRequest();
req.addEventListener("progress", (ev) => {
req.open('GET', 'example.xml', false);
if (ev.lengthComputable) {
req.onreadystatechange = function(){
ifconst (percent req= ev.readyStateloaded !=/ 4ev.total )* return100;
// 進捗表示
if ( req.status != 200 ) {
console.log("${percent}%転送しました。")
alert( req.statusText );
}
return;
else {
// 長さ不明
console.log("転送中。")
}
});
req.addEventListener("loadstart", (ev) => console.log("転送を開始しました。"));
req.addEventListener("load", (ev) => console.log("転送しました。"));
req.addEventListener("loadend", (ev) => console.log("転送が終了しました。"));
req.addEventListener("error", (ev) => console.log("ファイルの転送中にエラーが発生しました。"));
req.addEventListener("abort", (ev) => console.log("ユーザーが転送をキャンセルしました。"));
req.addEventListener("timeout", (ev) => console.log("転送がタイムアウトしました。"));
req.addEventListener("readystatechange", (ev) => {
switch (req.readyState) {
case XMLHttpRequest.UNSET:
console.log("UNSET");
returnbreak;
case XMLHttpRequest.OPENED:
console.log("OPENED");
break;
case XMLHttpRequest.HEADERS_RECEIVED:
console.log("HEADERS_RECEIVED");
break;
case XMLHttpRequest.LOADIND:
console.log("LOADIND");
break;
case XMLHttpRequest.DONE:
const status = req.status;
if (status req.=== 0 || (status !>= 200 && status < 400)) {
alert( console.log(req.responseText );
// ... }
else {
alert( console.log(req.responseXML );
console.log(req.responseText);
}
break;
default :
console.log(`${req.readyState} は仕様にないXMLHttpRequest.readyState`);
}
});
alert( req.responseXML );
req.open('GET', './example.xml', false);
alert( req.responseText );
// ...
};
req.send(null);
</syntaxhighlight>
※ イベントリスナーは open() を呼び出す前に追加する必要があります(もし、そうしないのであれば progress イベントは発火しません)。
 
== 脚注 ==