【JavaScript】非同期処理の種類と解説② fetch編

前回XMLHttpRequestを用いた非同期処理について解説をしましたが、今回はFetch APIを使用した非同期処理について解説します。元々XMLHttpRequestが非同期通信の主格として存在感を発揮していましたが、その代替としてfetchが登場しました。

XMLHttpRequestの解説記事 : /javascript/ajax-request

fetchとXMLHttpRequestではどのような違いがあるのでしょうか?

(さらに…)
投稿者:JO 投稿日時:

【JavaScript】非同期処理の種類と解説① XMLHttpRequest編

Ajaxは、JavaScriptでサーバー側と非同期通信を行うための技術です。非同期処理や同期処理については前回の記事で解説していますので、イメージが掴めていない方はまず前回の記事を読んで非同期処理について理解を深めてください。

/javascript/asynchronous-processing

筆者はシステム開発とWEB制作の両方に関わっていますが、WEB制作の場面でAjax通信を使用するケースはほとんどありません。非同期コールバック(setTimeout関数など)を用いてDOM操作を行うことはありますが、サーバーと通信して、取得したデータを加工する処理は基本的には開発で使用します。

jQueryなどのフレームワークを含めると、JavaScriptでAjax通信を行うための手段は複数用意されています。これから何回かに分けて、私が実際に使用しているメソッド(fetch, XMLHttpRequest, $.ajax)について解説したいと思います。

この章ではXMLHttpRequestについて解説します。

(さらに…)
投稿者:JO 投稿日時:

【JavaScript】非同期処理(Promise)とは何か

非同期処理は快適なUI / UXを実現する上で重要な概念です。

例えば、ファイルアップロードなどのデータの取り扱いにおいて一定の待ち時間が発生する処理を同期処理で行った場合、ユーザーはそれが完了するまでローディングを眺めるしかありません。

1つの画像を読み込むのに数秒かかり、それが終わったら次の画像にまた数秒となれば、ユーザーはアプリケーションの利用にうんざりして離脱するでしょう。

ですが仮に、複数の画像やデータ読み込みを並行して行えるとどうでしょう?ユーザーの待ち時間は圧倒的に削減されます。非同期処理は、あらゆる処理を並行して行うための重要な概念です。

今回はその重要な概念である非同期処理と、ES2015より導入されたPromiseインスタンスという仕組みについて解説します。

(さらに…)
投稿者:JO 投稿日時:

【JavaScript】FormDataオブジェクト解説とデータの作成

FormDataオブジェクトは、非同期処理(XMLHttprequest, fetch)を使用してデータを送信するために、keyとvalueのセット値を追加することができるインターフェイスです。

WEB開発で非同期処理を使用する場合に、ユーザーのアクションに応じて一部のデータのみ書き換え・更新を行いたいことは多々あります。FormDataを使用すると、DOMツリー内にForm要素を作成して形式的なステップを踏む必要がないため、一部のinput要素の値を取得して、$.ajax, XMLHttpRequest, fetchを使用してサーバーにデータを送信することができます。

FormDataで送信されるデータは、JSONなどと異なりマルチパートのフォームデータとして扱われるので、MIMEタイプの設定が必要なファイルデータの送信にも適しています。

これから数回に分けて、①FormDataの使い方、②データの送信、③ファイルの取り扱いについて解説していきます。

(さらに…)
投稿者:JO 投稿日時:

【JavaScript】DOM要素の変更を検知するMutationObserver

フロントエンド開発の現場でDOMの変更を検知して処理を実行する場面は多くあります。DOMに変更が加わる場面としては、ユーザーのアクションによってページの一部が描画されたり、ページ内のエディタにfocusが当たった or 外れたタイミングで処理を実行するものもあるでしょう。

今回、非同期処理で実装されたシステムでDOM操作をする際に、DOMの変更をリアルタイムで検知できるメソッドを探していたところ、MutationObserverを発見しましたので忘備録として記録に残します。

■ 関連記事 : JavaScriptの基礎習得に役立つ技術書【おすすめ3選】

(さらに…)
投稿者:JO 投稿日時: