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
 

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
 
勉強会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-Edo
Yuji Takayama
 
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
Amazon Web Services Japan
 
ASP.NET シングル ページ アプリケーション (SPA) 詳説
ASP.NET シングル ページ アプリケーション (SPA) 詳説ASP.NET シングル ページ アプリケーション (SPA) 詳説
ASP.NET シングル ページ アプリケーション (SPA) 詳説
Akira Inoue
 
自作node.jsフレームワークとnginxを使ってラジオサイトを作ってみた
自作node.jsフレームワークとnginxを使ってラジオサイトを作ってみた自作node.jsフレームワークとnginxを使ってラジオサイトを作ってみた
自作node.jsフレームワークとnginxを使ってラジオサイトを作ってみた
Yuki Takei
 
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 sdk
Kazuki 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 (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

Recently uploaded (11)

LoRaWAN スマート距離検出デバイスDS20L日本語マニュアル
LoRaWAN スマート距離検出デバイスDS20L日本語マニュアルLoRaWAN スマート距離検出デバイスDS20L日本語マニュアル
LoRaWAN スマート距離検出デバイスDS20L日本語マニュアル
 
新人研修 後半 2024/04/26の勉強会で発表されたものです。
新人研修 後半        2024/04/26の勉強会で発表されたものです。新人研修 後半        2024/04/26の勉強会で発表されたものです。
新人研修 後半 2024/04/26の勉強会で発表されたものです。
 
Amazon SES を勉強してみる その32024/04/26の勉強会で発表されたものです。
Amazon SES を勉強してみる その32024/04/26の勉強会で発表されたものです。Amazon SES を勉強してみる その32024/04/26の勉強会で発表されたものです。
Amazon SES を勉強してみる その32024/04/26の勉強会で発表されたものです。
 
NewSQLの可用性構成パターン(OCHaCafe Season 8 #4 発表資料)
NewSQLの可用性構成パターン(OCHaCafe Season 8 #4 発表資料)NewSQLの可用性構成パターン(OCHaCafe Season 8 #4 発表資料)
NewSQLの可用性構成パターン(OCHaCafe Season 8 #4 発表資料)
 
Observabilityは従来型の監視と何が違うのか(キンドリルジャパン社内勉強会:2022年10月27日発表)
Observabilityは従来型の監視と何が違うのか(キンドリルジャパン社内勉強会:2022年10月27日発表)Observabilityは従来型の監視と何が違うのか(キンドリルジャパン社内勉強会:2022年10月27日発表)
Observabilityは従来型の監視と何が違うのか(キンドリルジャパン社内勉強会:2022年10月27日発表)
 
業務で生成AIを活用したい人のための生成AI入門講座(社外公開版:キンドリルジャパン社内勉強会:2024年4月発表)
業務で生成AIを活用したい人のための生成AI入門講座(社外公開版:キンドリルジャパン社内勉強会:2024年4月発表)業務で生成AIを活用したい人のための生成AI入門講座(社外公開版:キンドリルジャパン社内勉強会:2024年4月発表)
業務で生成AIを活用したい人のための生成AI入門講座(社外公開版:キンドリルジャパン社内勉強会:2024年4月発表)
 
論文紹介:Selective Structured State-Spaces for Long-Form Video Understanding
論文紹介:Selective Structured State-Spaces for Long-Form Video Understanding論文紹介:Selective Structured State-Spaces for Long-Form Video Understanding
論文紹介:Selective Structured State-Spaces for Long-Form Video Understanding
 
Amazon SES を勉強してみる その22024/04/26の勉強会で発表されたものです。
Amazon SES を勉強してみる その22024/04/26の勉強会で発表されたものです。Amazon SES を勉強してみる その22024/04/26の勉強会で発表されたものです。
Amazon SES を勉強してみる その22024/04/26の勉強会で発表されたものです。
 
論文紹介: The Surprising Effectiveness of PPO in Cooperative Multi-Agent Games
論文紹介: The Surprising Effectiveness of PPO in Cooperative Multi-Agent Games論文紹介: The Surprising Effectiveness of PPO in Cooperative Multi-Agent Games
論文紹介: The Surprising Effectiveness of PPO in Cooperative Multi-Agent Games
 
論文紹介:Video-GroundingDINO: Towards Open-Vocabulary Spatio-Temporal Video Groun...
論文紹介:Video-GroundingDINO: Towards Open-Vocabulary Spatio-Temporal Video Groun...論文紹介:Video-GroundingDINO: Towards Open-Vocabulary Spatio-Temporal Video Groun...
論文紹介:Video-GroundingDINO: Towards Open-Vocabulary Spatio-Temporal Video Groun...
 
LoRaWANスマート距離検出センサー DS20L カタログ LiDARデバイス
LoRaWANスマート距離検出センサー  DS20L  カタログ  LiDARデバイスLoRaWANスマート距離検出センサー  DS20L  カタログ  LiDARデバイス
LoRaWANスマート距離検出センサー DS20L カタログ LiDARデバイス
 

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