0
0

More than 3 years have passed since last update.

Ajaxを使った非同期通信の流れ

Posted at

Ajaxを使った非同期通信の流れ

非同期通信(Ajax)とは?

ブラウザが再読み込みされることなく通信が行われる通信方式
画面をリロードしなくても、情報が反映されるWepアプリケーションの機能!

AsynchronousJavaScriptXML
の略!エイジャックスと読む。
レスポンスのデータに JSONというデータ形式を使う。

JSONとは?

JavaScriptObjectNotationの略で、データ交換を行うための一種
Rubyのハッシュと同様、キーとバリューの組み合わせ。
例){ name: “yamada”}みたいな

turbolinksを消す

gemfilre
application.html.haml
application.js

RailsのjQuery導入

gem 'jquery-rails'

application.js

//= require jquery
//= require jquery_ujs

非同期通信の実装の全体の流れ

1,JavaScriptを利用してリクエストを行う
2,コントローラでJSON形式のデータを用意するよう準備
3,レスポンスのためのJSON形式のデータを準備(~~.json.jbuilderファイル)
4,JavaScriptでレスポンスを受け取り、HTMLを構築構築構築〜
5,4番で構築したHTMLをViewにぶち込む。終わり。あら簡単

respond_toとは?

リクエストがHTMLかJSONのレスポンスを求めているのかを条件分岐してくれる。便利必須

コントローラーでJSON形式を受け取れるようにします

def create
  @todo = Todo.create(todo_params)
  respond_to do |format|
    format.html { redirect_to :root }
    format.json 
  end
end

jQueryのデータ取得からajaxに変換まで

$(function () {
  function buildHTML(post) {
    var html = `
    <div class='content'>${post.text}<div>
    `;
    return html;
  }
  $("form").on("submit", function (e) {
    e.preventDefault();
    var formData = new FormData(this);
    var url = $(this).attr("action");
    $.ajax({
      url: url,
      type: "POST",
      data: formData,
      dataType: "json",
      processData: false,
      contentType: false,
    })
      .done(function (post) {
        var html = buildHTML(post);
        $(".contents").append(html);
        $("#post_text").val("");
        $("form").prop("disabled", false);
      })
      .fail(function () {
        console.log("no");
      });
  });
});

オプション 説明
type HTTP通信の種類を記述する。通信方法は、GETとPOSTの2種類がある。
url リクエストを送信する先のURLを記述する。
data サーバに送信する値を記述する。
dataType サーバから返されるデータの型を指定する。

formからsubmitが起きると、thisでformDataを取得する。
urlはthisのactionを参照する。
formDataを使うなら一緒!仲良しの二人
processData: false,
contentType: false,
appendで生成したhtmlをぶち込む。
valで中身を消す
propでボタンを何回でも蘇らせられる(押せるようにできる)

0
0
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
0
0