Ajax:
非同期通信の仕方
ajaxは多分jqueryをつかってとか、railsにあるajaxのやり方でやってきたとおもうのですけど、今一度仕組みを理解しておこう。
それぞれの書き方は別途調べてつかってください!基本的な情報をここにはかいておきます。
サーバーと非同期で通信するために「XMLHttpRequest()」というAPIがあるのでそのインスタンスを作成して使用しましょう!
var xhr = new XMLHttpRequest();
xmlHttpRequest.responseType = 'json';
xhr.open('GET', 'https://furien/api');
xhr.send();
xhr.onreadystatechange = function() {
if ( xhr.readyState === 4 ) {
}
}
・データを受信するのはいいけど、通信が成功してるのか?通信はじまってるか?など詳細がわからないので「.readyState」で通信状態を管理することができます。
0 準備段階 まだ通信は行われていない状態
1 準備完了 通信を行う準備が完了している状態
2 通信開始 サーバーと通信が始まっている状態
3 受信中 サーバーから目的のデータを取得している状態
4 通信完了 データを取得して通信が終了している状態
・statusをつかってエラーハンドリングする。(status 200とかみたことあるはず)
・「.onreadystatechange」の中で xhr.statusをつかって通信結果が確認できる。
xhr.onreadystatechange = function() {
if( xhr.status === 200 ) {
}
};
・他にもあるけどよく見るやつ
200 成功 特に問題なく通信が成功した状態
401 エラー 認証が必要なため通信できない状態
403 エラー アクセスが禁止されていて通信できない状態
404 エラー 情報が存在しないために通信できない状態
500 エラー サーバー側の不具合で通信できない状態
503 エラー サーバーに負荷がかかって通信できない状態
xhr.onreadystatechange()と同じようにつかえる他のメソッドもあるのでケースバイケースで使い分けましょう。
ステータスに名前がついているようなものなので、下記のほうがわかりやすいかも!!
onloadstart : リクエストが開始した時
onprogress : リクエストが完了するまで周期的に実行される。受信したデータを確認することも可能。
onabort : abortメソッドによってリクエストが中断された時
onerror : リクエストでエラーが発生した時
onload : リクエストが完了した時
ontimeout : リクエストがタイムアウトした時
・GET通信
xhr.open('GET', 'http://sample.com/test.php?q=hogehoge');というようにかきます。
検索とかした時に xhr.open('GET', 'http://sample.com/test.php?q=hogehoge'); のようにURLと続けてサーバーに送信したい情報を「?q=hogehoge」のようにつけて書きます。
・POST通信(基本的に書き方はGET通信とかわらないです)
・.setRequestHeader()をつけて「content-type」を指定してあげる必要があります。指定しないとうまくデータがとれないことがあります。
・.send() GETのときにURLに続けて送信したかった情報を、send()内に書いて送信します。
var xhr = new XMLHttpRequest();
xhr.open('POST', 'http://sample.com');
xhr.setRequestHeader('content-type', 'application/x-www-form-urlencoded;charset=UTF-8');
xhr.send( 'q=hogehoge' );