AJAX勉強会 アリエル・ネットワーク株式会社 Copyright © 2001-2005 Ariel Networks, Inc. • • • • • • • • Ajaxとは Ajaxと通常のWebアクセスとの違い Ajaxのメリット、デメリット Ajaxを使う Ajaxを使っているサイト 簡単な実装例 Ajaxを使う上での注意 Ajax対応ライブラリ Copyright © 2001-2005 Ariel Networks, Inc. Ajaxとは • Asynchronous JavaScript and XML – 「Javascriptで」、サーバーと「非同期に」「XMLデータを」やり取りする • Ajax: A New Approach to Web Applications – http://www.adaptivepath.com/publications/essays/archives/000385.php – http://antipop.gs/docs/translations/ajax.html (日本語訳) Copyright © 2001-2005 Ariel Networks, Inc. Ajaxと通常のWebアクセスとの違い • 通常のWebアクセス – GETやPOSTによるHTTPリクエストをサーバーに投げる – リクエストに応じてサーバーから返されるHTMLをブラウザに表示する • Ajax – JavaScriptを使って適宜バックグラウンドでサーバーと通信する – サーバーからXMLデータを取得し、ダイナミックHTMLで表示を更新する Copyright © 2001-2005 Ariel Networks, Inc. Ajaxと通常のWebアクセスとの違い Copyright © 2001-2005 Ariel Networks, Inc. Ajaxと通常のWebアクセスとの違い • 従来のWebアクセス Copyright © 2001-2005 Ariel Networks, Inc. Ajaxと通常のWebアクセスとの違い • Ajaxの場合 Copyright © 2001-2005 Ariel Networks, Inc. Ajaxのメリット、デメリット • メリット – 柔軟な動作のRIA(Rich Internet Applicatoin)を実現できる – 動作させるためにプラグインが必要ない – 商用の開発環境が必要ない • デメリット – ブラウザによって動作に微妙な違いがある – ブラウザのローカルキャッシュがAjaxの動作に影響を与える場合がある – Ajaxでアクセスできるのは、元ページと同じドメイン内のURLに限られる – プログラムの中身がユーザーに丸見えになる (メリットでもある?) Copyright © 2001-2005 Ariel Networks, Inc. Ajaxを使っているサイト • • • • • Googleサジェスト – http://www.google.co.jp/webhp?complete=1 Googleローカル – http://maps.google.com/ AmazonのA9.com – http://a9.com/ Banana republic – http://www.bananarepublic.com/ Zimbra – http://www.zimbra.com/ Copyright © 2001-2005 Ariel Networks, Inc. Ajaxを使う • Ajaxを用いた実装とは、 – JavaScriptでXMLHttpRequestオブジェクトを利用 – ページ全体の読み込みとは非同期にサーバーと通信 – ダイナミックHTMLを利用してページの必要な部分だけを書き換える • XMLHttpRequestオブジェクト – IE5.0以降 (1999年3月) – Mozilla 1.0以降 (2002年6月) • 昔からある技術を組み合わせて、Ajaxという名前を付けただけ Copyright © 2001-2005 Ariel Networks, Inc. 簡単な実装例 var HttpRequest; function hoge(url) { if (this.XMLHttpRequest) { HttpRequest = new XMLHttpRequest(); } else { HttpRequest = new ActiveXObject("Microsoft.XMLHTTP"); } HttpRequest.onreadystatechange = readyStateChangeHandler; HttpRequest.open("GET", url, true); HttpRequest.send(null); } function readyStateChangeHandler() { if (HttpRequest.readyState == 4) { if (HttpRequest.status == 200) { var obj = document.getElementById(“fuga"); obj.innerHTML = HttpRequest.responseText; } } } Copyright © 2001-2005 Ariel Networks, Inc. XMLHttpRequestオブジェクトのメソッド メソッド 解説 abort() リクエストの中止 getAllResponseHeaders() レスポンスのヘッダをすべて取得 getResponseHeader("headerLabel") レスポンスのヘッダ"headerLabel"の値を取得 open("method", "URL"[, asyncFlag[, "userName"[, "password"]]]) リクエストの方法、URL、同期/非同期アクセス、ユー ザ名、パスワードをセットする send(content) リクエストを送信する setRequestHeader("label", "value") リクエストのヘッダ"label/value"を指定する Copyright © 2001-2005 Ariel Networks, Inc. XMLHttpRequestオブジェクトのプロパティ プロパティ 解説 onreadystatechange ステータスが変わったときに呼ばれるイベントハンドラ readyState オブジェクトのステータス: 0 (UNINITIALIZED) オブジェクトは、作成されていますが、まだ、初期化されていません(open メソッド は呼ばれていません)。 1 (LOADING) オブジェクトが作成されましたが、まだ、send メソッドは呼ばれていません。 2 (LOADED) send メソッドは呼ばれましたが、statusとヘッダはまだ届いていません。 3 (INTERACTIVE) いくつかのデータを受け取りました。この状態ではresponseBodyやresponseTextプロ パティはエラーを返すでしょう。それは、statusとレスポンスヘッダがまだすべて届いていないからです。 4 (COMPLETED) すべてのデータを受け取りました。responseBody と responseText プロパティの完全な データが利用可能です。 responseText 受け取ったデータの文字列 responseXML 受け取ったデータのXML status サーバから受け取ったステータスコード 404や200など statusText Statusコードに対応した文字列 404であれば"Not Found"とか、200であれば"OK"など Copyright © 2001-2005 Ariel Networks, Inc. 簡単なデモ Copyright © 2001-2005 Ariel Networks, Inc. Ajaxを使う上での注意 • • • • アクセスするドメイン制限 – Ajaxでアクセスできるのは、同じドメイン内に限定される 文字コード ブラウザのローカルキャッシュ XMLデータの取り扱い Copyright © 2001-2005 Ariel Networks, Inc. 文字コードについて • 日本語を扱う場合 – Ajaxでそのまま日本語を送受信すると文字化けするブラウザがある – Formなど • ブラウザが自動的にURIエンコードしてくれる – Ajax • 明示的にURIエンコードする必要がある • Javascriptで使用できる方法 – escape() 古いメソッドで、ブラウザにより実装が異なる – encodeURI()とencodeURIComponent() ECMAScriptの仕様に従ったメソッド • どんな文字コードの文字列でもUTF-8にしてエンコードする Copyright © 2001-2005 Ariel Networks, Inc. ブラウザのローカルキャッシュ • Ajaxによるサーバーへのアクセスもブラウザのキャッシュが有効になる – → 意図しない動作や、まったく動作していないように見えてしまう • • ブラウザのキャッシュの設定を無効にする アクセス時に毎回値が異なるパラメータを追加する – url = url + "t=“ + (new Date()).getTime(); • リクエストヘッダに細工をする – xmlHttpRequest.setRequestHeader("If-Modified-Since", "Thu, 01 Jun 1970 00:00:00 GMT"); Copyright © 2001-2005 Ariel Networks, Inc. XMLデータの取り扱い • • responseXMLはXMLオブジェクト responseTextはテキストデータ • XMLデータをJavascriptで扱うにはDOM操作が必要 – 取り扱いにくい responseXML <root> <test1>hello1</test1> <test2>hello2</test2> </root> alert(responeXML.firstChild.nodeValue); • JSON(JavaScript Object Notation) var JSONObject = { "test1": "hello1“, "test2": "hello2“ }; alert(JSONObject.test1); • JKL.ParseXML http://www.kawa.net/works/js/jkl/parsexml.html Copyright © 2001-2005 Ariel Networks, Inc. Ajax対応ライブラリ • • • prototype.js – http://prototype.conio.net/ jslb_ajax.js – http://jsgt.org/mt/archives/01/000409.html Survey of AJAX/JavaScript Libraries – http://wiki.osafoundation.org/bin/view/Projects/AjaxLibraries Copyright © 2001-2005 Ariel Networks, Inc. Q&A Copyright © 2001-2005 Ariel Networks, Inc.
© Copyright 2024 ExpyDoc