🙆

【Rails】Ajax(非同期通信)

2023/07/09に公開

通常のデータ送受信(同期通信)とは

リクエストとレスポンスが一体となり、順番に処理を行うこと。
Webページでは、ページのリンクや、フォーム送信ボタンをクリックすると、リンク先のページが表示される。そのとき、ブラウザは次に表示するページをWebサーバーに「リクエスト」し、リクエストを受けたWebサーバーはデータを返す処理「レスポンス(応答)」をする。
ブラウザからのリクエストが発生すると、新しくやってきたデータが、それまでのデータを完全に書き換えるようになっているので、ブラウザに表示されるデータも全て書き換わる。

Ajax(非同期通信)とは

ページの再読み込みをせずに、裏側でデータを送受信すること。
Ajax(Asynchronous JavaScript and XML)とは、通常のブラウザからのリクエストに代わって、JavaScriptからWebサーバーにデータをリクエストし、返されてきたデータもJavaScript自身が受け取る仕組み。
新しくやってきたデータがそれまであったデータを書き換えることがないので、表示されていたページが完全に書き換えることはない。つまり、リロードせずにデータのやり取りができる。

同期通信 vs Ajax

イメージ

  • 同期通信:
    ブラウザに表示されているページが書き換わる

  • Ajax:
    JavaScriptがWebサーバーとやり取りするため、表示されているページが書き換わらない

positive & negative

同期通信とAjaxについて表でまとめてみる。

同期通信 Ajax
ページリロード ページ全体がリロードされる ページの一部のみを更新できる
ユーザビリティ ページリロードによる中断が発生する可能性あり リロード不要でスムーズな操作と高速な応答が可能
サーバー通信 同期的にサーバーと通信し、レスポンスを待つ 他の作業をしながらサーバーと通信できる
データ取得 ページ全体の再読み込みが必要 部分的なデータの取得や表示が可能
データ送信 フォームの送信によるページリロードが必要 フォームデータの送信後もページの状態を維持できる
データ量と通信量 ページ全体の再レンダリングにより通信量が増える可能性あり 部分的なデータの取得や送信により通信量を削減できる

上記からメリットデメリットをまとめると以下の通り。

同期処理 Ajax
positive 全体的な処理の単純さや、データの取得や送信がシンプル スムーズな操作と高速な応答が得られ、他の作業をしながらサーバーと通信できる
negative 待ち時間や中断等が発生 開発が複雑になる

Ajaxの注意点

Ajaxのデータ送受信は、セキュリティの関係上、原則として同一オリジン内に制限される。

同一オリジンとは

オリジンを理解するには、ドメインの理解が必要なので、以下の通り表にする。

項目 説明
ドメイン インターネット上にあるサーバーのアドレスを特定するためのURLの一部
サブドメイン ドメインの下位の部分を指す
スキーム URLの先頭にあるプロトコル(http:// やhttps:// など)
ポート番号 ネットワーク通信の際に使用する特定の番号

同一オリジンとは、上述したドメイン、サブドメイン、スキーム、ポート番号がすべて同じであるURL を指す。

下図はURLの各部名称とオリジン。


つまり、Ajaxのデータ送受信は、ウェブアプリケーションが自分の家(同一オリジン)内でのみデータをやり取りすることができ、違う家(異なるオリジン)に住んでいる人とはやり取りすることはできない。
この点を考慮し開発する必要がある。

Discussion