第7回 Javascript入門

Similar documents
第7回 Javascript入門

JavaScript 演習 2 1

第7回 Javascript入門

第 7 回の内容 動的な Web サイト フォーム Web システムの構成

JavaScript演習

メディプロ1 Javaサーブレット補足資料.ppt

PowerPoint プレゼンテーション

AJAXを使用した高い対話性を誇るポートレットの構築

コンテンツメディアプログラミング実習2

Java Scriptプログラミング入門 3.6~ 茨城大学工学部情報工学科 08T4018Y 小幡智裕

Si 知識情報処理

第 8 回の内容 クライアントサイド処理 JavaScript の基礎

Web プログラミング 1 JavaScript (4) (4 章 ) 2013/7/17( 水 ) 日時 講義内容 4/10 ( 水 ) ガイダンス Web (1 章 ) 4/17 ( 水 ) HTML+CSS (1) (2 章 ) 4/24 ( 水 ) HTML+CSS (2) (2 章 ) 5

JC/400でポップアップウィンドウの制御&活用ノウハウ!

実験 5 CGI プログラミング 1 目的 動的にWebページを作成する手法の一つであるCGIについてプログラミングを通じて基本的な仕組みを学ぶ 2 実験 実験 1 Webサーバの設定確認と起動 (1)/etc/httpd/conf にある httpd.conf ファイルの cgi-bin に関する

JavaScript演習

第5回 マインクラフト・プログラミング入門

JavaScript¥×¥í¥°¥é¥ß¥ó¥°ÆþÌç

Calendar Plus JavaScript API リファレンス ラジカルブリッジ Ver

SVG資料第10回目(その2) Ajaxによる同期通信と非同期通信の違い

19 ステップで 2 大人気スクリプト言語を学ぶ GUI のあるアプリを作る STEP11 から STEP12 までまとめ 1.Python での GUI アプリ作成 Python は標準ではグラフィックスの機能を持ちませんが ライブラリを使うことで GUI のアプリを作成することができる そこで

JavaScript 1.! DOM Ajax Shelley Powers,, JavaScript David Flanagan, JavaScript 2

前ページからの続き // テキストボックス02 id 属性で取得 // id 属性で取得する場合は一意に決まるので 何番目かの指定は不要 var textbox02elem = document.getelementbyid("text_box02_id"); if ("001" == statee

2003年度 情報処理概論

untitled

e10s におけるプロセス間通信の基本 219 HACK #34 Components.manager.removeBootstrappedManifestLocati on() function shutdown(adata, areason) { const IOService =

ご利用のコンピュータを設定する方法 このラボの作業を行うには 事前設定された dcloud ラボを使用するか 自身のコンピュータをセットアップします 詳細については イベントの事前準備 [ 英語 ] とラボの設定 [ 英語 ] の両方のモジュールを参照してください Python を使用した Spar

サンプル CSS web ページを開くと同時にピエロの玉乗りが動き出すアニメーションを作ってみましょう AnimeAuto の説明 HTML の記述 (AnimeAuto.html) ピエロの画像に pierrot という id を 玉の画像に ball という id を付けておきます <!DOCT

JavaScript プログラミング 4.Web ブラウザのオブジェクト 4-4 window オブジェクト 4-5 location オブジェクトと history オブジェクト 4-6 link オブジェクト 08T4082A 野太樹

PowerPoint プレゼンテーション

intra-mart Accel Platform — IM-Repository拡張プログラミングガイド   初版  

SmartBrowser_document_build30_update.pptx

intra-mart Accel Platform — 招待機能プログラミングガイド   初版  

10th Developer Camp - B5

Java 基礎問題ドリル ~ メソッドを理解する ~ 次のプログラムコードに 各設問の条件にあうメソッドを追加しなさい その後 そのメソッドが正しく動作することを検証するためのプログラムコードを main メソッドの中に追加しなさい public class Practice { // ここに各設問

Sinatra と MongoDB 今回は Sinatra で MongoDB の操作を体験してみます 進捗に合わせて ドライバから Ruby で使える便利な ORM の紹介をします

paper.pdf

WEBシステムのセキュリティ技術

07_経営論集2010 小松先生.indd

Microsoft Word - JavaScript基礎講座Web Speech API.docx

( 前回 ) 提出課題 課題 1( 提出課題 ): データベースからデータを読み込み, そのデータを表示する Web ページ作成してみましょう user テーブルから書籍のデータを一覧表示する. 手順 1:PHP のファイルを user_list.php という名前で作業フォルダに作成する. プログ

(1) プログラムの開始場所はいつでも main( ) メソッドから始まる 順番に実行され add( a,b) が実行される これは メソッドを呼び出す ともいう (2)add( ) メソッドに実行が移る この際 add( ) メソッド呼び出し時の a と b の値がそれぞれ add( ) メソッド

Microsoft Word - VB.doc

Microsoft PowerPoint - Lecture_3

Microsoft PowerPoint - Lecture_2

ウェブデザイン技能検定学科試験 3 級 1. 各設問において 正しいものは 1 を 間違っているものは 2 を 該当設問の解答欄に記せ 第 1 問 head 要素は body 要素の前に記述する 第 2 問 アクセシビリティの観点から img 要素の alt 属性には何らかのテキストを入力することが

Transcription:

Slide URL https://vu5.sfc.keio.ac.jp/slide/ Web 情報システム構成法第 9 回 JavaScript 入門 (2) 萩野達也 (hagino@sfc.keio.ac.jp) 1

JavaScript 入門 ( 前回 ) オブジェクト指向について JavaScriptの誕生プロトタイプベースのオブジェクト指向 言語 構文および制御構造 代入条件文繰り返し関数 データ型 基本オブジェクト HTML への埋め込み <script> </script> Document Object Model 2

JavaScript の実行 読み込み時 <script> </script> は読み込み時に実行される. 関数などは定義されるだけなので, 実際の実行ではない. 変数の初期化なども行われる. イベント発生時 ボタンを押すなどのイベントが発生した時に, 指定されたプログラムが実行される. イベントハンドラ イベント処理を行うプログラム 前もってイベントごとに登録をしておく イベントは非同期に発生する. 3

同期入力と非同期入力 同期入力 プログラムが指定した時に入力を行う. 非同期入力 プログラムが別の処理中にも入力が発生する. 処理 入力待ち 通常処理 処理 入力の処理 イベントハンドラー入力の処理 4

JavaScript Event キーボード関係 keydown, keyup, keypress マウス関係 mouseover, mousedown, mouseup 要素関係 click, focus, input ウインドウ関係 resize, scroll 5

イベント処理 イベントハンドラ イベントが発生した時に行う処理を記述 HTML 要素の属性として指定 要素やオブジェクトに対してイベントハンドラを設定する HTML での指定 <button onclick=" イベントハンドラ "> ボタン </button> <p> どこでも <span onclick='window.alert("hello!")'> クリック </span> できる </p> JavaScript 内での指定 HTML 要素に関係ないものは, この方法でしか指定できない element.addeventlistener( イベント, 関数 ); document.getelementbyid('mybtn').addeventlistener('click', function(e){ document.getelementbyid('demo').textcontent = "Hello World!"; }); 設定したイベントハンドラには発生したイベントが渡される. 6

JavaScript の並列処理 JavaScript は基本的にシングルスレッドです. 同時に複数の処理を行わない. 変数をロックして保護するなどの必要はない. イベントはキューに貯められ, 一つづつ処理される. イベント処理 A イベント処理 B イベント処理 C メインスレッド イベントをキューに入れる 現在 次のイベントを取り出し実行 新イベント イベントキュー イベント C あるイベントの処理が重いと, 処理が滞る. WebWorkers を使ってバックグラウンドで処理を行うことも可能. マルチスレッドになる. WebWorkers に処理のためのメッセージを送り, 結果をイベントとして受け取る. WebWorkers は直接は DOM を操作することはできない. 7

タイマーの利用 一定時間後に何かの処理を行いたい settimeout でタイムアウトのイベント処理を指定 timer = settimeout( 関数, ms 時間 ); 1000ms 関数 settimeout( 関数, 1000); タイマーを止めるには cleartimeout(timer) 一定時間間隔で何かの処理を行いたい setinterval で一定間隔で実行する処理を指定 timer = setinterval( 関数, ms 時間 ); 1000ms 1000ms 1000ms setinterval( 関数, 1000); 関数 関数 関数 8 タイマーを止めるには clearinterval(timer)

setinterval の例 デジタル時計を作ってみよう <!DOCTYPE html> <html> <head> <meta charset="utf-8"> <title>javascript Timer</title> </head> <body> <h1>javascript Clock</h1> <p id="clock"></p> <script> function showtime() { var element = document.getelementbyid('clock'); var now = new Date(); element.textcontent = now.gethours() + ':' + now.getminutes() + ':' + now.getseconds(); } showtime(); setinterval(showtime, 1000); </script> </body> </html> 9

Ajax Ajax = Asynchronous JavaScript + XML Web 2.0 で登場した. JavaScript と XML を使って非同期にサーバとの通信を行う. Web ページを取得する HTTP は基本的に同期的 ページを取得するリクエストをサーバに送り, 文書が返ってくるまで待つ 非同期的な処理を行いたい 最初に軽いページとして全体を受け取り, ユーザがブラウ視している間に徐々に中身を増やしていくユーザの要求に従って内容をサーバから取得するフォームの送信を行わずに, サーバにデータを送る 10

XMLHttpRequest オブジェクト JavaScript 内からhttpを使ってサーバにアクセスしデータを取得する var xhr = new XMLHttpRequest(); HTTP を行うオブジェクトの生成 xhr.onreadystatechange = function(){ if (this.readystate == 4 && this.status == 200) { xhr.responsetext にサーバから送られてきたデータが入っている } }; 送られてきたデータの処理 xhr.open("get", "URL", true); xhr.send(); リクエストを送る HTTP リクエストのメソッドと URI 非同期処理を指定 GET または POST メソッドを指定 11

GET と POST でのデータの受け渡し GET URL に問い合わせの形で追加する var xhr = new XMLHttpRequest(); xhr.onreadystatechange = function(){... }; xhr.open("get", "http://.../chat.php?method=get&id=123"); xhr.send(); POST send でデータを渡すデータの形式を指定する必要がある GETと同じにするには application/x-www-form-urlencoded var xhr = new XMLHttpRequest(); xhr.onreadystatechange = function(){... }; xhr.open("post", "http://.../chat.php"); xhr.setrequestheader("content-type", "application/x-www-form-urlencoded"); xhr.send("method=post&user=abc&message=hello%20world"); 12 URI に書くことのできる文字には制限があるため encodeuricomponent を使ってエンコードすると良い... + '&message=' + encodeuricomponent(m);

JSON サーバとクライアントでJavaScriptのオブジェクトをやり取りする場合には, JSON 形式を用いることが多い. JSON = JavaScript Object Notation JavaScript 以外でも利用できるようにJavaScriptのデータを表現したもの JavaScriptデータのシリアライズ JavaScript データ { name:"hagino", age:20, class:["web", "Haskell"] } JSON シリアライズ (stringify) デコード (parse) {"name":"hagino", "age:"20, "class":["web", "Haskell"]} x = JSON.stringify(obj); JavaScript のデータ obj を JSON としてシリアライズした文字列を返す obj = JSON.parse(x); JSON 文字列をデコードして JavaScript のデータを返す 13

チャットを作ってみよう 複数人がメッセージを書き込み, それを共有できるチャットのアプリケーションを作ってみましょう. チャットサーバ チャットメッセージの管理 メッセージの書き込み メッセージの読み出し 14

チャットサーバ API チャットサーバ URL http://web.sfc.keio.ac.jp/~hagino/wis/chat.php メッセージの書き込み 引数 method=post user= ユーザ名 message= メッセージ 戻り値 (JSON) { id: メッセージ番号 } chat.php メッセージの読み出し 引数 method=get id= メッセージ番号 戻り値 (JSON) 与えられたメッセージ番号より大きなメッセージ番号を持つメッセージの中で, 最もメッセージ番号が小さいものを返す { id: メッセージ番号, user: ユーザ名, message: メッセージ } 15

課題 : チャットのクライアントを作成しなさい チャットサーバの API を使って, チャットを行うクライアントを作成しなさい. chat.php が動作しない場合は,chat.php と chatserver.php をコピーし, サーバ名とポート番号を変更し, 自分の環境で動作させてください. CSS を使ってスタイルをカスタマイズしなさい. 提出 https://vu5.sfc.keio.ac.jp/kadai/ HTML(JavaScript) を提出 JavaScriptはHTMLに埋め込むこと 締め切り : 6 月 17 日正午 16 chat.html 例 <!DOCTYPE html> <html>... <body> <header><h1> チャット </h1></header> <article> <form> <div> <label> 氏名 : <input type="text" id="u"></label> <label> メッセージ : <input type="text" id="m"></label> <input type="submit" value=" 書き込む " onclick="sendmessage();return false;"> </div> </form> <div id="c"></div> <script> function sendmessage() {... } function getmessage(id) {... } getmessage(0); </script> </article> </body> </html>

サンプル chat.html メッセージの書き込み 氏名とメッセージを入力できるformを用意 書き込み ボタンでsendMessageを呼び出す formの本来のsubmitを抑制するためにreturn falseとする sendmessage 関数 form の入力テキストを取り出し,method=post として chat.php に送る メッセージの読み出し getmessageによりサーバからメッセージを受け取る getmessage 関数 method=getとしてchat.phpに送る idは自分が受け取っている最新のメッセージの番号を与える idの初期値は0で始める 受け取ったメッセージをHTMLの適当なところに挿入する 次のメッセージを受け取るために, 再帰的にgetMessageを呼び出す 17

まとめ JavaScript の続き 同期処理と非同期処理 イベント タイマー XMLHttpRequest 18