XMLHttpRequest -リロードせずにWebページを更新するための素晴らしいオブジェクト
5891 ワード
の場合は、ユーザーが単一のボタンをクリックしてバックグラウンドでの要求をAPIに要求を送信することができます、単純なWebページを作成したいと思いますpublicly available API , そして、一旦その要求に対する応答が受信されたならば、それをウェブページの上の良い方法で表示してください
さて、これはXMLHttpRequestのおかげで、クライアント側から可能です.
この例では、waifu.im
Webページは、このAPIによって提供されるランダムなイメージを表示することができなければなりません
このイメージは、2つのラジオを使用してユーザーが指定したパラメータに適合します.
本体の2番目の部分は機能を呼び出す一つのボタンです
ボディーの第3の部分は、我々が見えないところを取り替えて、イメージが現れることを望むところです
一旦それがされるならば、我々はリクエストを構築するために必要なすべてを持っています
私たちは単純なGETリクエストをしています、そして、我々は応答のデータがJSON形式であると思っています
次に、リクエストのステータスが変更されたときに何が起こるかを指定します
下記のコードでは、我々は
このコードは多くのプロパティ
リクエストのすべての詳細が指定されたので、リクエストを
注:上記のすべてのコードのライブの例here
今私たちが完了したら、ブラウザでHTMLファイルを開くことができますし、ネットワークのモニタを開くことができます(Ctrl + Shift + e Firefoxで、Ctrl + Shift + Jをクリックして“ネットワーク”の任意のクロムベースのブラウザ)をクリックし、Webページ上のイメージを取得するボタンをクリックしてください!
最後の2つのリクエストを見ますか?最初の要求は、APIを取得するには
番目の要求は、実際に画像を取得するものです最初のリクエストでは、画像のURLを
私は、これがほとんどすべてをカバーすると思っています!
XMLHttpRequestは本当にクレイジーです、それはあなたがユーザーの要求をし、任意のデータを受信することができますように、いつでも(何かをクリックするだけではない!)そして、あなたがそれを望むならば、そのデータについて何かをするために、ユーザーのウェブページを変えることを含むその完全性に!
私はあなたがこれを行うことができます楽しいことを想像し、さらにもっと楽しく実際にそれを作ることを望む!
さて、これはXMLHttpRequestのおかげで、クライアント側から可能です.
APIとWebページの目的の選択
この例では、waifu.im
Webページは、このAPIによって提供されるランダムなイメージを表示することができなければなりません
/random/
ユーザが特定のボタンをクリックするたびにこのイメージは、2つのラジオを使用してユーザーが指定したパラメータに適合します.
<input type="radio">
)HTMLファイルの作成
<!DOCTYPE html>
<html>
<head>
<meta charset="utf-8">
<meta name="viewport" content="width=device-width, initial-scale=1">
<title>getWaifu</title>
<script type="text/javascript" src="index.js"></script>
</head>
<body>
<!-- 1st part: Allow the user to specify what sort of image they want -->
<div id="parameters">
<div id="img_type" class="parameter">
<input type="radio" id="png_jpg" name="img_type" value="PNG_JPG" checked>
<label for="png_jpg">Not Animated (PNG/JPG)</label><br>
<input type="radio" id="gif" name="img_type" value="GIF">
<label for="gif">Animated (GIF)</label><br>
</div>
<div id="safe" class="parameter">
<input type="radio" id="sfw" name="safe" value="SFW" checked>
<label for="sfw">Safe For Work (SFW)</label><br>
<input type="radio" id="nsfw" name="safe" value="NSFW">
<label for="nsfw">Not Safe For Work (NSFW)</label><br>
</div>
</div>
<!-- 2nd part: Give the user an image that matches the parameters -->
<button id="trigger" onclick="waifu('random', document.getElementById('parameters'), document.getElementById('display'))">Get a Waifu!</button>
<!-- 3rd part: Create a "home" or "container" for the image -->
<div id="display">
<span style="display: none">Placeholder~</span>
</div>
</body>
</html>
ボディの第1の部分は、パラメータを保持します:ユーザーは、イメージがアニメーションでなければならないかどうか、そして、それが「仕事のために安全であるべきかどうか」を決定します本体の2番目の部分は機能を呼び出す一つのボタンです
waifu()
) ファイルをクリックすると、将来のJSファイルで指定されます"random"
第1および第3の部分の引数と同様にボディーの第3の部分は、我々が見えないところを取り替えて、イメージが現れることを望むところです
span
プロセス中のプレースホルダJSファイルの作成
function waifu(route, params, display) {
// Figure out what are the specified parameters
let inputs = params.getElementsByTagName("input")
let gif = inputs.gif.checked
let nsfw = inputs.nsfw.checked
// Create the request
let xhr = new XMLHttpRequest()
xhr.open("GET", `https://api.waifu.im/${route}?is_nsfw=${nsfw}&gif=${gif}`)
xhr.setRequestHeader("Accept", "application/json")
// Specify the behaviour upon receiving a response
xhr.onreadystatechange = () => {
if (xhr.readyState !== 4) return
let data = JSON.parse(xhr.response).images[0]
// Create the image element
let image = document.createElement("img")
image.setAttribute("src", data.url)
image.setAttribute("alt", "Couldn't load the image... ><")
// Put it on the website
display.replaceChild(image, display.lastElementChild)
}
// Send the request
xhr.send()
}
第一に、我々はparams
ユーザーが望むイメージがGIFでなければならないかどうか、そして、それがNSFW一旦それがされるならば、我々はリクエストを構築するために必要なすべてを持っています
xhr
リクエストのURLでroute
常に"random"
その関数を呼び出す唯一のボタンが私たちは単純なGETリクエストをしています、そして、我々は応答のデータがJSON形式であると思っています
次に、リクエストのステータスが変更されたときに何が起こるかを指定します
if (xhr.readyState !== 4) return
行は、応答が受信されない限り、以下のコードを実行すべきではないことを意味します下記のコードでは、我々は
img
レスポンス内で受信したプロパティを使用する要素data.url
) そして、我々はウェブサイトにその要素を使用してdisplay
, 何でも取り替えて!(関数がコールされた最初の場合、プレースホルダこのコードは多くのプロパティ
data
保持し、それはあなたがイメージについての詳細をたくさん表示することができます、もっとたくさん持っている!リクエストのすべての詳細が指定されたので、リクエストを
xhr.send()
, そして魔法が起こる!結果を見る
注:上記のすべてのコードのライブの例here
今私たちが完了したら、ブラウザでHTMLファイルを開くことができますし、ネットワークのモニタを開くことができます(Ctrl + Shift + e Firefoxで、Ctrl + Shift + Jをクリックして“ネットワーク”の任意のクロムベースのブラウザ)をクリックし、Webページ上のイメージを取得するボタンをクリックしてください!
最後の2つのリクエストを見ますか?最初の要求は、APIを取得するには
data
そしてそれを使用してWebページを変更するには!番目の要求は、実際に画像を取得するものです最初のリクエストでは、画像のURLを
<img>
要素、しかし、この要素がウェブページにある今、それはそのsrc
属性!もちろん、そのsrc
属性は最初のリクエストから取得したURLです私は、これがほとんどすべてをカバーすると思っています!
XMLHttpRequestは本当にクレイジーです、それはあなたがユーザーの要求をし、任意のデータを受信することができますように、いつでも(何かをクリックするだけではない!)そして、あなたがそれを望むならば、そのデータについて何かをするために、ユーザーのウェブページを変えることを含むその完全性に!
私はあなたがこれを行うことができます楽しいことを想像し、さらにもっと楽しく実際にそれを作ることを望む!
Reference
この問題について(XMLHttpRequest -リロードせずにWebページを更新するための素晴らしいオブジェクト), 我々は、より多くの情報をここで見つけました https://dev.to/taevas/xmlhttprequest-an-amazing-object-for-updating-a-webpage-without-reloading-58h4テキストは自由に共有またはコピーできます。ただし、このドキュメントのURLは参考URLとして残しておいてください。
Collection and Share based on the CC Protocol