SlideShare a Scribd company logo
1 of 21
Download to read offline
Pro ASP.NET MVC 3 Framework


CHAPTER 19
Unobtrusive Ajax
@84zume
2


目次
1. About Unobtrusive Ajax
2. Working with Ajax
  1. Ajaxとは
  2. Ajax Forms
  3. Ajax Links
3. Working with JSON
4. おわりに
3




About Unobtrusive Ajax
4


Unobtrusive Ajaxとは
“Unobtrusive JavaScript (控えめな JavaScript) とは、
Web アプリケーションで JavaScript、CSS、HTML 要素を分離する手法です。
この 3 つの要素を分離してアプリケーションを編成することで、
アプリケーションの管理が容易になり、プラットフォームや
 Web ブラウザーの種類が違っても、
アプリケーションが一貫して同じように振る舞うようになります。”
               「控えめな JavaScript と Ajax を作成するためのガイド」より


• JavaScript を使用してアプリケーションのプログレッシブ・エンハンスメントを行う
 (コア機能には JavaScript を使用しない)

• 繰り返しを減らし、適切な構造を保ち、                 いいやつには、
 読みやすく保守しやすい構造を維持する                  いいものを。

• Web およびアクセシビリティー標準に準拠する
5


Graceful Degradationを保証する
             だめなやつにも、
              それなりを。


                 OK
                                 Ajaxを使わず
                                 サーバー処理




                 NG




     JavaScriptが無効であるブラウザーでの挙動
6




               Working with Ajax
• Ajax Forms
• Ajax Links
7


Ajaxとは
=Asynchronous JavaScript + XML の略。
ウェブブラウザ内で非同期通信とインターフェイスの構築
などを行う技術の総称。
8


Ajax Forms 使い方(基礎)
• HTML フォームの内容をAjax通信でサーバーに送りたい
→@Ajax.BeginForms()を利用する
 @{
      var ajaxOptions = new AjaxOptions
       {
          UpdateTargetId = "tabledata",
          Url=Url.Action("PersonData")
       };
  }
 <h2>     Person List</h2>
 @using (Ajax.BeginForm("PersonData", ajaxOptions)) {
       <table>
          <thead>
              <th>
        ...

出力されるHTML
 <form action="/Home/PersonData" data-ajax="true"
 data-ajax-mode="replace" data-ajax-update="#tabledata"
 data-ajax-url="/Home/PersonData" id="form0" method="post">
9


Ajax Formsの動作原理
1. Html描画時
  1. Ajax.BeginFormヘルパーが、Html属性にAjax用の情報を出力
     ※余分なJavaScriptや、CSSは埋め込まれない


2. 実行時
  1. jquery.unobtrusive-ajaxがDOMをスキャン
  2. 「data-ajax=“true”」となっているformを探す
  3. Ajax通信を開始する
10


Ajax Forms 使い方(応用)
• 拡張したい場合は、AjaxOptions Propertyを利用
          Property                           説明                        利用頻度(私見)

Conifrm                  Ajax通信を始める前に確認ダイアログを出す                        あまり使わない

HttpMethod               Httpメソッド(Get or Post)を指定                      必須

                         サーバーから受け取ったDataのHtmlへの追加方法
InsertionMode                                                          必要に応じて
                         (InsertAfter or InsertBefore or Replace)
                                                                       あまり使わない
LoadingElementId         通信開始時に表示する要素のID値

                         受け取ったデータを読み込むまでに遅延させる時間
LoadingElementDuration                                                 あまり使わない
                         (ミリ秒)

UpdateTargetId           サーバーからの処理結果を反映させる要素のId                        必須

Url                      リクエスト先のURL                                    必須

                         OnBegin, OnComplete, OnSuccess, OnFailure時に
OnXXXX                                                                 必要に応じて
                         呼び出すJavaScriptのコールバック関数
11


Ajax Links 使い方(基礎)
• ActionLinkでAjax通信によってサーバーとやりとりしたい
→@Ajax.ActionLink()を利用する

 <ul>
    @foreach (var str in new[] { "All", "Tokyo", "Nagoya", "Hokkaido" })
    {
      <li>@Ajax.ActionLink(str, "Index", new { place = str },
           new AjaxOptions
           {
              UpdateTargetId = "tabledata",
              LoadingElementId = "loading",
              LoadingElementDuration = 2000,
              Url = Url.Action("PersonData", new { place = str })
      })
      …


出力されるHTML
 <ul> <li>
 <a data-ajax="true" data-ajax-loading="#loading" data-ajax-loading-duration="2000"
 data-ajax-mode="replace" data-ajax-update="#tabledata“
 data-ajax-url="/Home/PersonData?place=All" href="/?place=All">All</a>
 </li>…
12




Working with JSON
13


JSONとは
=JavaScript Object Notationの略。
JavaScriptにおけるオブジェクトの表記法をベースとした
軽量なデータ記述言語。

• フォーマット
  • 配列
  ["milk", "bread", "eggs"]

 • オブジェクト
  [{"name": "John", "age": 33}]


 • オブジェクトのリスト
  [{"name": "John", "age": 33}, {"name": “Taro", "age": 23}]
14


MVCでJSONを扱うには?


            4    1

  クライアント側            サーバー側




            3    2


  ブラウザー           Webサーバー
  (≒View)        (≒Controller)
15


サーバーで受信 ①
• 普通に受信できる!
• AjaxでPost/Getされた場合も、モデルバインダーが解決
する
public ActionResult JsonData(Person person) {
    …
}
16


サーバーから送信 ②
• 戻り値をJsonResult型にして送信する。
• Contoroller.Jsonヘルパーを利用
 public JsonResult JsonData(string place) {
     …
     return Json(result, JsonRequestBehavior.AllowGet);
 }


注意
• JavaScriptSerializerがオブジェクトからJSONに変換する。
これの仕様を把握しておくべき。
http://msdn.microsoft.com/ja-jp/library/system.web.script.serialization.javascriptserializer.aspx
17


クライアントで受信 ③
• $.ajaxで自分で定義する。
• 「サーバーから送信② 」のアクションにアクセス
• OnSuccess時に画面に描画するコールバック関数を定義
• JSON.stringifyにてJsonを文字列に変換




クライアントから送信 ④
• $.ajaxで自分で定義する。
 ※Ajax.BeginFormを使うのではない。
 これだとHTMLが戻ってくる。
18


クライアントから送受信
<script type="text/javascript">
     $(document).ready(function () {
         $('form').submit(function (e) {
             var person = {
                 Name: $('#Name').val(),
                 Birthday: $('#Birthday').val(),
                 Birthplace: $('#Birthplace').val()
             };
             $.ajax({
                 url: '@Url.Action("Index")',
                 type: 'POST',
                 data: JSON.stringify(person),                     POSTの情報
                 dataType: 'json',
                 processData: false,
                 contentType: 'application/json; charset=utf-8',
                 success: function (data) {
                      $('#nameTarget').text(data.Name);            レスポンス
                      $('#dateTarget').text(data.Birthday);
                      $('#placeTarget').text(data.Birthplace);     の処理
                 }
             });
        });
     });
 </script>
19




おわりに
20


まとめ

1. Ajaxを使って効率的な通信を実現すべし


2. JSONを使ってモジュールを疎結合にすべし


3. JSONを処理するJSライブラリーを把握すべし
21


参考文献
• CodePlex
「ASP.NET MVC 3 RTM」
  http://aspnet.codeplex.com/releases


• IBM Developer Center
「控えめな JavaScript と Ajax を作成するためのガイド」
  http://www.ibm.com/developerworks/jp/web/library/wa-aj-
  unobtrusive/


• JSON の紹介
   http://www.json.org/json-ja.html

More Related Content

What's hot

Twitter連携chrome extension作り方
Twitter連携chrome extension作り方Twitter連携chrome extension作り方
Twitter連携chrome extension作り方Hiroshi Oyamada
 
PHP 2大 web フレームワークの徹底比較!
PHP 2大 web フレームワークの徹底比較!PHP 2大 web フレームワークの徹底比較!
PHP 2大 web フレームワークの徹底比較!Shohei Okada
 
FIWARE Orion Context Broker コンテキスト情報管理 (Orion 3.4.0対応)
FIWARE Orion Context Broker コンテキスト情報管理 (Orion 3.4.0対応)FIWARE Orion Context Broker コンテキスト情報管理 (Orion 3.4.0対応)
FIWARE Orion Context Broker コンテキスト情報管理 (Orion 3.4.0対応)fisuda
 
FIWARE Orion Context Broker コンテキスト情報管理 (Orion 3.5.0対応)
FIWARE Orion Context Broker コンテキスト情報管理 (Orion 3.5.0対応)FIWARE Orion Context Broker コンテキスト情報管理 (Orion 3.5.0対応)
FIWARE Orion Context Broker コンテキスト情報管理 (Orion 3.5.0対応)fisuda
 
ソーシャルアプリ勉強会(第一回資料)配布用
ソーシャルアプリ勉強会(第一回資料)配布用ソーシャルアプリ勉強会(第一回資料)配布用
ソーシャルアプリ勉強会(第一回資料)配布用Yatabe Terumasa
 
Azure で Serverless 初心者向けタッチ&トライ
Azure で Serverless 初心者向けタッチ&トライAzure で Serverless 初心者向けタッチ&トライ
Azure で Serverless 初心者向けタッチ&トライMasanobu Sato
 
Start React with Browserify
Start React with BrowserifyStart React with Browserify
Start React with BrowserifyMuyuu Fujita
 
Selenium webdriver使ってみようず
Selenium webdriver使ってみようずSelenium webdriver使ってみようず
Selenium webdriver使ってみようずOda Shinsuke
 
JSON Value into Power Automate
JSON Value into Power AutomateJSON Value into Power Automate
JSON Value into Power AutomateTomoyuki Obi
 
イマドキの現場で使えるJavaライブラリ事情
イマドキの現場で使えるJavaライブラリ事情イマドキの現場で使えるJavaライブラリ事情
イマドキの現場で使えるJavaライブラリ事情takezoe
 
FIWARE Orion Context Broker コンテキスト情報管理 (Orion 3.3.0対応)
FIWARE Orion Context Broker コンテキスト情報管理 (Orion 3.3.0対応)FIWARE Orion Context Broker コンテキスト情報管理 (Orion 3.3.0対応)
FIWARE Orion Context Broker コンテキスト情報管理 (Orion 3.3.0対応)fisuda
 
iOS の通信における認証の種類とその取り扱い
iOS の通信における認証の種類とその取り扱いiOS の通信における認証の種類とその取り扱い
iOS の通信における認証の種類とその取り扱いniwatako
 
Spring bootでweb バリデート編
Spring bootでweb バリデート編Spring bootでweb バリデート編
Spring bootでweb バリデート編なべ
 
FIWARE Orion Context Broker コンテキスト情報管理 (Orion 3.6.0対応)
FIWARE Orion Context Broker コンテキスト情報管理 (Orion 3.6.0対応)FIWARE Orion Context Broker コンテキスト情報管理 (Orion 3.6.0対応)
FIWARE Orion Context Broker コンテキスト情報管理 (Orion 3.6.0対応)fisuda
 

What's hot (20)

Twitter連携chrome extension作り方
Twitter連携chrome extension作り方Twitter連携chrome extension作り方
Twitter連携chrome extension作り方
 
20090212
2009021220090212
20090212
 
PHP 2大 web フレームワークの徹底比較!
PHP 2大 web フレームワークの徹底比較!PHP 2大 web フレームワークの徹底比較!
PHP 2大 web フレームワークの徹底比較!
 
FIWARE Orion Context Broker コンテキスト情報管理 (Orion 3.4.0対応)
FIWARE Orion Context Broker コンテキスト情報管理 (Orion 3.4.0対応)FIWARE Orion Context Broker コンテキスト情報管理 (Orion 3.4.0対応)
FIWARE Orion Context Broker コンテキスト情報管理 (Orion 3.4.0対応)
 
FIWARE Orion Context Broker コンテキスト情報管理 (Orion 3.5.0対応)
FIWARE Orion Context Broker コンテキスト情報管理 (Orion 3.5.0対応)FIWARE Orion Context Broker コンテキスト情報管理 (Orion 3.5.0対応)
FIWARE Orion Context Broker コンテキスト情報管理 (Orion 3.5.0対応)
 
ソーシャルアプリ勉強会(第一回資料)配布用
ソーシャルアプリ勉強会(第一回資料)配布用ソーシャルアプリ勉強会(第一回資料)配布用
ソーシャルアプリ勉強会(第一回資料)配布用
 
Azure で Serverless 初心者向けタッチ&トライ
Azure で Serverless 初心者向けタッチ&トライAzure で Serverless 初心者向けタッチ&トライ
Azure で Serverless 初心者向けタッチ&トライ
 
Start React with Browserify
Start React with BrowserifyStart React with Browserify
Start React with Browserify
 
Selenium webdriver使ってみようず
Selenium webdriver使ってみようずSelenium webdriver使ってみようず
Selenium webdriver使ってみようず
 
JSON Value into Power Automate
JSON Value into Power AutomateJSON Value into Power Automate
JSON Value into Power Automate
 
20111203
2011120320111203
20111203
 
イマドキの現場で使えるJavaライブラリ事情
イマドキの現場で使えるJavaライブラリ事情イマドキの現場で使えるJavaライブラリ事情
イマドキの現場で使えるJavaライブラリ事情
 
FIWARE Orion Context Broker コンテキスト情報管理 (Orion 3.3.0対応)
FIWARE Orion Context Broker コンテキスト情報管理 (Orion 3.3.0対応)FIWARE Orion Context Broker コンテキスト情報管理 (Orion 3.3.0対応)
FIWARE Orion Context Broker コンテキスト情報管理 (Orion 3.3.0対応)
 
Blocksの活用法
Blocksの活用法Blocksの活用法
Blocksの活用法
 
iOS の通信における認証の種類とその取り扱い
iOS の通信における認証の種類とその取り扱いiOS の通信における認証の種類とその取り扱い
iOS の通信における認証の種類とその取り扱い
 
Spring bootでweb バリデート編
Spring bootでweb バリデート編Spring bootでweb バリデート編
Spring bootでweb バリデート編
 
IgGrid 入門編
IgGrid 入門編IgGrid 入門編
IgGrid 入門編
 
HTML5 on ASP.NET
HTML5 on ASP.NETHTML5 on ASP.NET
HTML5 on ASP.NET
 
Webに今求められているレベル: HTML5 コントロールを利用した開発
Webに今求められているレベル: HTML5 コントロールを利用した開発Webに今求められているレベル: HTML5 コントロールを利用した開発
Webに今求められているレベル: HTML5 コントロールを利用した開発
 
FIWARE Orion Context Broker コンテキスト情報管理 (Orion 3.6.0対応)
FIWARE Orion Context Broker コンテキスト情報管理 (Orion 3.6.0対応)FIWARE Orion Context Broker コンテキスト情報管理 (Orion 3.6.0対応)
FIWARE Orion Context Broker コンテキスト情報管理 (Orion 3.6.0対応)
 

Similar to Pro aspnetmvc3framework chap19

Ibm worklight デモ環境とサンプルコード
Ibm worklight デモ環境とサンプルコードIbm worklight デモ環境とサンプルコード
Ibm worklight デモ環境とサンプルコードK Kimura
 
Seasarプロジェクト徹底攻略
Seasarプロジェクト徹底攻略Seasarプロジェクト徹底攻略
Seasarプロジェクト徹底攻略takezoe
 
勉強会force#3 iOSアプリ開発
勉強会force#3 iOSアプリ開発勉強会force#3 iOSアプリ開発
勉強会force#3 iOSアプリ開発Kazuki Nakajima
 
Data api workshop at Co-Edo
Data api workshop at Co-EdoData api workshop at Co-Edo
Data api workshop at Co-EdoYuji Takayama
 
Isomorphic web development with scala and scala.js
Isomorphic web development  with scala and scala.jsIsomorphic web development  with scala and scala.js
Isomorphic web development with scala and scala.jsTanUkkii
 
基礎から見直す ASP.NET MVC の単体テスト自動化方法 ~ Windows Azure 関連もあるかも~
基礎から見直す ASP.NET MVC の単体テスト自動化方法 ~ Windows Azure 関連もあるかも~基礎から見直す ASP.NET MVC の単体テスト自動化方法 ~ Windows Azure 関連もあるかも~
基礎から見直す ASP.NET MVC の単体テスト自動化方法 ~ Windows Azure 関連もあるかも~normalian
 
20120528 aws meister-reloaded-awssd-kforjava-public
20120528 aws meister-reloaded-awssd-kforjava-public20120528 aws meister-reloaded-awssd-kforjava-public
20120528 aws meister-reloaded-awssd-kforjava-publicAmazon Web Services Japan
 
ASP.NET シングル ページ アプリケーション (SPA) 詳説
ASP.NET シングル ページ アプリケーション (SPA) 詳説ASP.NET シングル ページ アプリケーション (SPA) 詳説
ASP.NET シングル ページ アプリケーション (SPA) 詳説Akira Inoue
 
SharePoint Onlineアクセスモニター
SharePoint OnlineアクセスモニターSharePoint Onlineアクセスモニター
SharePoint OnlineアクセスモニターAkihiro Ehara
 
Apache Torqueについて
Apache TorqueについてApache Torqueについて
Apache Torqueについてtako pons
 
自作node.jsフレームワークとnginxを使ってラジオサイトを作ってみた
自作node.jsフレームワークとnginxを使ってラジオサイトを作ってみた自作node.jsフレームワークとnginxを使ってラジオサイトを作ってみた
自作node.jsフレームワークとnginxを使ってラジオサイトを作ってみたYuki Takei
 
初めての Data api cms どうでしょう - 大阪夏の陣
初めての Data api   cms どうでしょう - 大阪夏の陣初めての Data api   cms どうでしょう - 大阪夏の陣
初めての Data api cms どうでしょう - 大阪夏の陣Yuji Takayama
 
Alfresco勉強会20120829: やさしいShareダッシュレットの作り方
Alfresco勉強会20120829: やさしいShareダッシュレットの作り方Alfresco勉強会20120829: やさしいShareダッシュレットの作り方
Alfresco勉強会20120829: やさしいShareダッシュレットの作り方linzhixing
 
Tech talk salesforce mobile sdk
Tech talk   salesforce mobile sdkTech talk   salesforce mobile sdk
Tech talk salesforce mobile sdkKazuki Nakajima
 

Similar to Pro aspnetmvc3framework chap19 (20)

Java EE8 Report
Java EE8 ReportJava EE8 Report
Java EE8 Report
 
Ibm worklight デモ環境とサンプルコード
Ibm worklight デモ環境とサンプルコードIbm worklight デモ環境とサンプルコード
Ibm worklight デモ環境とサンプルコード
 
Seasarプロジェクト徹底攻略
Seasarプロジェクト徹底攻略Seasarプロジェクト徹底攻略
Seasarプロジェクト徹底攻略
 
勉強会force#3 iOSアプリ開発
勉強会force#3 iOSアプリ開発勉強会force#3 iOSアプリ開発
勉強会force#3 iOSアプリ開発
 
Data api workshop at Co-Edo
Data api workshop at Co-EdoData api workshop at Co-Edo
Data api workshop at Co-Edo
 
Isomorphic web development with scala and scala.js
Isomorphic web development  with scala and scala.jsIsomorphic web development  with scala and scala.js
Isomorphic web development with scala and scala.js
 
基礎から見直す ASP.NET MVC の単体テスト自動化方法 ~ Windows Azure 関連もあるかも~
基礎から見直す ASP.NET MVC の単体テスト自動化方法 ~ Windows Azure 関連もあるかも~基礎から見直す ASP.NET MVC の単体テスト自動化方法 ~ Windows Azure 関連もあるかも~
基礎から見直す ASP.NET MVC の単体テスト自動化方法 ~ Windows Azure 関連もあるかも~
 
20120528 aws meister-reloaded-awssd-kforjava-public
20120528 aws meister-reloaded-awssd-kforjava-public20120528 aws meister-reloaded-awssd-kforjava-public
20120528 aws meister-reloaded-awssd-kforjava-public
 
ASP.NET シングル ページ アプリケーション (SPA) 詳説
ASP.NET シングル ページ アプリケーション (SPA) 詳説ASP.NET シングル ページ アプリケーション (SPA) 詳説
ASP.NET シングル ページ アプリケーション (SPA) 詳説
 
Visualforce + jQuery
Visualforce + jQueryVisualforce + jQuery
Visualforce + jQuery
 
densan2014-late01
densan2014-late01densan2014-late01
densan2014-late01
 
Ajax 応用
Ajax 応用Ajax 応用
Ajax 応用
 
SharePoint Onlineアクセスモニター
SharePoint OnlineアクセスモニターSharePoint Onlineアクセスモニター
SharePoint Onlineアクセスモニター
 
Apache Torqueについて
Apache TorqueについてApache Torqueについて
Apache Torqueについて
 
自作node.jsフレームワークとnginxを使ってラジオサイトを作ってみた
自作node.jsフレームワークとnginxを使ってラジオサイトを作ってみた自作node.jsフレームワークとnginxを使ってラジオサイトを作ってみた
自作node.jsフレームワークとnginxを使ってラジオサイトを作ってみた
 
初めての Data api cms どうでしょう - 大阪夏の陣
初めての Data api   cms どうでしょう - 大阪夏の陣初めての Data api   cms どうでしょう - 大阪夏の陣
初めての Data api cms どうでしょう - 大阪夏の陣
 
BPStudy20121221
BPStudy20121221BPStudy20121221
BPStudy20121221
 
Alfresco勉強会20120829: やさしいShareダッシュレットの作り方
Alfresco勉強会20120829: やさしいShareダッシュレットの作り方Alfresco勉強会20120829: やさしいShareダッシュレットの作り方
Alfresco勉強会20120829: やさしいShareダッシュレットの作り方
 
Tech talk salesforce mobile sdk
Tech talk   salesforce mobile sdkTech talk   salesforce mobile sdk
Tech talk salesforce mobile sdk
 
20120425
2012042520120425
20120425
 

More from Hideki Hashizume

私が見つけた境界線
私が見つけた境界線私が見つけた境界線
私が見つけた境界線Hideki Hashizume
 
あじゃみつワークショップ
あじゃみつワークショップあじゃみつワークショップ
あじゃみつワークショップHideki Hashizume
 
Pro aspnetmvc3framework chap23
Pro aspnetmvc3framework chap23Pro aspnetmvc3framework chap23
Pro aspnetmvc3framework chap23Hideki Hashizume
 
Pro aspnetmvc3framework chap15
Pro aspnetmvc3framework chap15Pro aspnetmvc3framework chap15
Pro aspnetmvc3framework chap15Hideki Hashizume
 
Pro aspnetmvc3framework chap11
Pro aspnetmvc3framework chap11Pro aspnetmvc3framework chap11
Pro aspnetmvc3framework chap11Hideki Hashizume
 

More from Hideki Hashizume (6)

私が見つけた境界線
私が見つけた境界線私が見つけた境界線
私が見つけた境界線
 
僕らのKPTA
僕らのKPTA僕らのKPTA
僕らのKPTA
 
あじゃみつワークショップ
あじゃみつワークショップあじゃみつワークショップ
あじゃみつワークショップ
 
Pro aspnetmvc3framework chap23
Pro aspnetmvc3framework chap23Pro aspnetmvc3framework chap23
Pro aspnetmvc3framework chap23
 
Pro aspnetmvc3framework chap15
Pro aspnetmvc3framework chap15Pro aspnetmvc3framework chap15
Pro aspnetmvc3framework chap15
 
Pro aspnetmvc3framework chap11
Pro aspnetmvc3framework chap11Pro aspnetmvc3framework chap11
Pro aspnetmvc3framework chap11
 

Recently uploaded

SOPを理解する 2024/04/19 の勉強会で発表されたものです
SOPを理解する       2024/04/19 の勉強会で発表されたものですSOPを理解する       2024/04/19 の勉強会で発表されたものです
SOPを理解する 2024/04/19 の勉強会で発表されたものですiPride Co., Ltd.
 
スマートフォンを用いた新生児あやし動作の教示システム
スマートフォンを用いた新生児あやし動作の教示システムスマートフォンを用いた新生児あやし動作の教示システム
スマートフォンを用いた新生児あやし動作の教示システムsugiuralab
 
[DevOpsDays Tokyo 2024] 〜デジタルとアナログのはざまに〜 スマートビルディング爆速開発を支える 自動化テスト戦略
[DevOpsDays Tokyo 2024] 〜デジタルとアナログのはざまに〜 スマートビルディング爆速開発を支える 自動化テスト戦略[DevOpsDays Tokyo 2024] 〜デジタルとアナログのはざまに〜 スマートビルディング爆速開発を支える 自動化テスト戦略
[DevOpsDays Tokyo 2024] 〜デジタルとアナログのはざまに〜 スマートビルディング爆速開発を支える 自動化テスト戦略Ryo Sasaki
 
論文紹介:Semantic segmentation using Vision Transformers: A survey
論文紹介:Semantic segmentation using Vision Transformers: A survey論文紹介:Semantic segmentation using Vision Transformers: A survey
論文紹介:Semantic segmentation using Vision Transformers: A surveyToru Tamaki
 
Postman LT Fukuoka_Quick Prototype_By Daniel
Postman LT Fukuoka_Quick Prototype_By DanielPostman LT Fukuoka_Quick Prototype_By Daniel
Postman LT Fukuoka_Quick Prototype_By Danieldanielhu54
 
【早稲田AI研究会 講義資料】3DスキャンとTextTo3Dのツールを知ろう!(Vol.1)
【早稲田AI研究会 講義資料】3DスキャンとTextTo3Dのツールを知ろう!(Vol.1)【早稲田AI研究会 講義資料】3DスキャンとTextTo3Dのツールを知ろう!(Vol.1)
【早稲田AI研究会 講義資料】3DスキャンとTextTo3Dのツールを知ろう!(Vol.1)Hiroki Ichikura
 
論文紹介:Content-Aware Token Sharing for Efficient Semantic Segmentation With Vis...
論文紹介:Content-Aware Token Sharing for Efficient Semantic Segmentation With Vis...論文紹介:Content-Aware Token Sharing for Efficient Semantic Segmentation With Vis...
論文紹介:Content-Aware Token Sharing for Efficient Semantic Segmentation With Vis...Toru Tamaki
 
TSAL operation mechanism and circuit diagram.pdf
TSAL operation mechanism and circuit diagram.pdfTSAL operation mechanism and circuit diagram.pdf
TSAL operation mechanism and circuit diagram.pdftaisei2219
 
論文紹介:Automated Classification of Model Errors on ImageNet
論文紹介:Automated Classification of Model Errors on ImageNet論文紹介:Automated Classification of Model Errors on ImageNet
論文紹介:Automated Classification of Model Errors on ImageNetToru Tamaki
 
Open Source UN-Conference 2024 Kawagoe - 独自OS「DaisyOS GB」の紹介
Open Source UN-Conference 2024 Kawagoe - 独自OS「DaisyOS GB」の紹介Open Source UN-Conference 2024 Kawagoe - 独自OS「DaisyOS GB」の紹介
Open Source UN-Conference 2024 Kawagoe - 独自OS「DaisyOS GB」の紹介Yuma Ohgami
 

Recently uploaded (10)

SOPを理解する 2024/04/19 の勉強会で発表されたものです
SOPを理解する       2024/04/19 の勉強会で発表されたものですSOPを理解する       2024/04/19 の勉強会で発表されたものです
SOPを理解する 2024/04/19 の勉強会で発表されたものです
 
スマートフォンを用いた新生児あやし動作の教示システム
スマートフォンを用いた新生児あやし動作の教示システムスマートフォンを用いた新生児あやし動作の教示システム
スマートフォンを用いた新生児あやし動作の教示システム
 
[DevOpsDays Tokyo 2024] 〜デジタルとアナログのはざまに〜 スマートビルディング爆速開発を支える 自動化テスト戦略
[DevOpsDays Tokyo 2024] 〜デジタルとアナログのはざまに〜 スマートビルディング爆速開発を支える 自動化テスト戦略[DevOpsDays Tokyo 2024] 〜デジタルとアナログのはざまに〜 スマートビルディング爆速開発を支える 自動化テスト戦略
[DevOpsDays Tokyo 2024] 〜デジタルとアナログのはざまに〜 スマートビルディング爆速開発を支える 自動化テスト戦略
 
論文紹介:Semantic segmentation using Vision Transformers: A survey
論文紹介:Semantic segmentation using Vision Transformers: A survey論文紹介:Semantic segmentation using Vision Transformers: A survey
論文紹介:Semantic segmentation using Vision Transformers: A survey
 
Postman LT Fukuoka_Quick Prototype_By Daniel
Postman LT Fukuoka_Quick Prototype_By DanielPostman LT Fukuoka_Quick Prototype_By Daniel
Postman LT Fukuoka_Quick Prototype_By Daniel
 
【早稲田AI研究会 講義資料】3DスキャンとTextTo3Dのツールを知ろう!(Vol.1)
【早稲田AI研究会 講義資料】3DスキャンとTextTo3Dのツールを知ろう!(Vol.1)【早稲田AI研究会 講義資料】3DスキャンとTextTo3Dのツールを知ろう!(Vol.1)
【早稲田AI研究会 講義資料】3DスキャンとTextTo3Dのツールを知ろう!(Vol.1)
 
論文紹介:Content-Aware Token Sharing for Efficient Semantic Segmentation With Vis...
論文紹介:Content-Aware Token Sharing for Efficient Semantic Segmentation With Vis...論文紹介:Content-Aware Token Sharing for Efficient Semantic Segmentation With Vis...
論文紹介:Content-Aware Token Sharing for Efficient Semantic Segmentation With Vis...
 
TSAL operation mechanism and circuit diagram.pdf
TSAL operation mechanism and circuit diagram.pdfTSAL operation mechanism and circuit diagram.pdf
TSAL operation mechanism and circuit diagram.pdf
 
論文紹介:Automated Classification of Model Errors on ImageNet
論文紹介:Automated Classification of Model Errors on ImageNet論文紹介:Automated Classification of Model Errors on ImageNet
論文紹介:Automated Classification of Model Errors on ImageNet
 
Open Source UN-Conference 2024 Kawagoe - 独自OS「DaisyOS GB」の紹介
Open Source UN-Conference 2024 Kawagoe - 独自OS「DaisyOS GB」の紹介Open Source UN-Conference 2024 Kawagoe - 独自OS「DaisyOS GB」の紹介
Open Source UN-Conference 2024 Kawagoe - 独自OS「DaisyOS GB」の紹介
 

Pro aspnetmvc3framework chap19

  • 1. Pro ASP.NET MVC 3 Framework CHAPTER 19 Unobtrusive Ajax @84zume
  • 2. 2 目次 1. About Unobtrusive Ajax 2. Working with Ajax 1. Ajaxとは 2. Ajax Forms 3. Ajax Links 3. Working with JSON 4. おわりに
  • 4. 4 Unobtrusive Ajaxとは “Unobtrusive JavaScript (控えめな JavaScript) とは、 Web アプリケーションで JavaScript、CSS、HTML 要素を分離する手法です。 この 3 つの要素を分離してアプリケーションを編成することで、 アプリケーションの管理が容易になり、プラットフォームや Web ブラウザーの種類が違っても、 アプリケーションが一貫して同じように振る舞うようになります。” 「控えめな JavaScript と Ajax を作成するためのガイド」より • JavaScript を使用してアプリケーションのプログレッシブ・エンハンスメントを行う (コア機能には JavaScript を使用しない) • 繰り返しを減らし、適切な構造を保ち、 いいやつには、 読みやすく保守しやすい構造を維持する いいものを。 • Web およびアクセシビリティー標準に準拠する
  • 5. 5 Graceful Degradationを保証する だめなやつにも、 それなりを。 OK Ajaxを使わず サーバー処理 NG JavaScriptが無効であるブラウザーでの挙動
  • 6. 6 Working with Ajax • Ajax Forms • Ajax Links
  • 7. 7 Ajaxとは =Asynchronous JavaScript + XML の略。 ウェブブラウザ内で非同期通信とインターフェイスの構築 などを行う技術の総称。
  • 8. 8 Ajax Forms 使い方(基礎) • HTML フォームの内容をAjax通信でサーバーに送りたい →@Ajax.BeginForms()を利用する @{ var ajaxOptions = new AjaxOptions { UpdateTargetId = "tabledata", Url=Url.Action("PersonData") }; } <h2> Person List</h2> @using (Ajax.BeginForm("PersonData", ajaxOptions)) { <table> <thead> <th> ... 出力されるHTML <form action="/Home/PersonData" data-ajax="true" data-ajax-mode="replace" data-ajax-update="#tabledata" data-ajax-url="/Home/PersonData" id="form0" method="post">
  • 9. 9 Ajax Formsの動作原理 1. Html描画時 1. Ajax.BeginFormヘルパーが、Html属性にAjax用の情報を出力 ※余分なJavaScriptや、CSSは埋め込まれない 2. 実行時 1. jquery.unobtrusive-ajaxがDOMをスキャン 2. 「data-ajax=“true”」となっているformを探す 3. Ajax通信を開始する
  • 10. 10 Ajax Forms 使い方(応用) • 拡張したい場合は、AjaxOptions Propertyを利用 Property 説明 利用頻度(私見) Conifrm Ajax通信を始める前に確認ダイアログを出す あまり使わない HttpMethod Httpメソッド(Get or Post)を指定 必須 サーバーから受け取ったDataのHtmlへの追加方法 InsertionMode 必要に応じて (InsertAfter or InsertBefore or Replace) あまり使わない LoadingElementId 通信開始時に表示する要素のID値 受け取ったデータを読み込むまでに遅延させる時間 LoadingElementDuration あまり使わない (ミリ秒) UpdateTargetId サーバーからの処理結果を反映させる要素のId 必須 Url リクエスト先のURL 必須 OnBegin, OnComplete, OnSuccess, OnFailure時に OnXXXX 必要に応じて 呼び出すJavaScriptのコールバック関数
  • 11. 11 Ajax Links 使い方(基礎) • ActionLinkでAjax通信によってサーバーとやりとりしたい →@Ajax.ActionLink()を利用する <ul> @foreach (var str in new[] { "All", "Tokyo", "Nagoya", "Hokkaido" }) { <li>@Ajax.ActionLink(str, "Index", new { place = str }, new AjaxOptions { UpdateTargetId = "tabledata", LoadingElementId = "loading", LoadingElementDuration = 2000, Url = Url.Action("PersonData", new { place = str }) }) … 出力されるHTML <ul> <li> <a data-ajax="true" data-ajax-loading="#loading" data-ajax-loading-duration="2000" data-ajax-mode="replace" data-ajax-update="#tabledata“ data-ajax-url="/Home/PersonData?place=All" href="/?place=All">All</a> </li>…
  • 13. 13 JSONとは =JavaScript Object Notationの略。 JavaScriptにおけるオブジェクトの表記法をベースとした 軽量なデータ記述言語。 • フォーマット • 配列 ["milk", "bread", "eggs"] • オブジェクト [{"name": "John", "age": 33}] • オブジェクトのリスト [{"name": "John", "age": 33}, {"name": “Taro", "age": 23}]
  • 14. 14 MVCでJSONを扱うには? 4 1 クライアント側 サーバー側 3 2 ブラウザー Webサーバー (≒View) (≒Controller)
  • 15. 15 サーバーで受信 ① • 普通に受信できる! • AjaxでPost/Getされた場合も、モデルバインダーが解決 する public ActionResult JsonData(Person person) { … }
  • 16. 16 サーバーから送信 ② • 戻り値をJsonResult型にして送信する。 • Contoroller.Jsonヘルパーを利用 public JsonResult JsonData(string place) { … return Json(result, JsonRequestBehavior.AllowGet); } 注意 • JavaScriptSerializerがオブジェクトからJSONに変換する。 これの仕様を把握しておくべき。 http://msdn.microsoft.com/ja-jp/library/system.web.script.serialization.javascriptserializer.aspx
  • 17. 17 クライアントで受信 ③ • $.ajaxで自分で定義する。 • 「サーバーから送信② 」のアクションにアクセス • OnSuccess時に画面に描画するコールバック関数を定義 • JSON.stringifyにてJsonを文字列に変換 クライアントから送信 ④ • $.ajaxで自分で定義する。 ※Ajax.BeginFormを使うのではない。 これだとHTMLが戻ってくる。
  • 18. 18 クライアントから送受信 <script type="text/javascript"> $(document).ready(function () { $('form').submit(function (e) { var person = { Name: $('#Name').val(), Birthday: $('#Birthday').val(), Birthplace: $('#Birthplace').val() }; $.ajax({ url: '@Url.Action("Index")', type: 'POST', data: JSON.stringify(person), POSTの情報 dataType: 'json', processData: false, contentType: 'application/json; charset=utf-8', success: function (data) { $('#nameTarget').text(data.Name); レスポンス $('#dateTarget').text(data.Birthday); $('#placeTarget').text(data.Birthplace); の処理 } }); }); }); </script>
  • 21. 21 参考文献 • CodePlex 「ASP.NET MVC 3 RTM」 http://aspnet.codeplex.com/releases • IBM Developer Center 「控えめな JavaScript と Ajax を作成するためのガイド」 http://www.ibm.com/developerworks/jp/web/library/wa-aj- unobtrusive/ • JSON の紹介 http://www.json.org/json-ja.html