Mail: Pass:
前月  2007年2月  翌月
1 2 3 4
5 6 7 8 9 10 11
12 13 14 15 16 17 18
19 20 21 22 23 24 25
26 27 28

links

 びびすけさんのページ
 体重・走距離分析
 月間・靴・コース走距離
 タイムトライアル分析
 速度・心拍数分析
 自転車・月間・コース走距離
 オセロ勝敗・レート分析
 ViVi web site

新着日記

 モカ将棋 0.005 リリース
 座標がずれる
 壁にぶちあたった
 Laramie V1 に勝ち越し!
 vs Laramie V1 10番勝負
 モカ将棋10番勝負 (2)
 開発マシンが死んだ!?
 vs Lesserkai 1.3.2 10番勝負
 TJshogi にも初勝利
 Lesserkai 1.3.2 (1秒)に初勝利!
 将棋大会 地区予選
 プレイアウト結果の信頼性
 vs ランダム将棋
 moca将棋
 ViVi 2.05
 原始的なモンテカルロ木探索

新着コメント

 直った/びびすけ
 vs Laramie V2/びびすけ
 vs LaramieV1 10…/びびすけ
 vs TJshogi 0.03…/びびすけ
 vs ランダム将…/びびすけ
 vs TJshogi 0.03/びびすけ
 羽生×山崎/びびすけ
 ボナ×渡辺竜王/びびすけ
 羽生×山崎 戦/びびすけ
 ボナンザ×渡辺竜…/びびすけ

トラックバック

トラックバックはありません。

カテゴリ一覧

 基本データ
 テニス
 ジョギング
 ViVi
 自転車
 Web
 RunRunDietOnline
 PostgreSQL
 ビルドアップ走
 ランニング

7件の日記があります。

あさ (2007/02/09 09:05) 基本データ 0 comment

体重:62.35kg


Ajax で遊ぶ (2007/02/09 09:23) 0 comment

最近は Ajax で遊んでいる
Ajax 用のフレームワークはいろいろ存在するが、まずはデファクトスタンダード的な prototype.js を使ってみることにする
 参照:prototype.js の開発者向けメモ

使い方:
ヘッダ部分に、以下のように記述する
    <script src="./js/prototype.js" type="text/JavaScript"></script>
    <script type="text/javascript"><!--
    ....
    // --></script>
最初の行は prototype.js のインクルード指定。この例では js サブディレクトリを切っているが、同一ディレクトリでもかまわない
次の行以降に JavaScript プログラムを記述する

HTML と JavaScript を分離したい場合は、以下のように記述する
    <script src="./js/prototype.js" type="text/JavaScript"></script>
    <script src="./js/hogehoge.js" type="text/JavaScript"></script>
ファイルを別にすると例示するときにめんどうなので、ここではHTMLファイルに直接記述することにする。
ある程度規模が大きくなったときや、画面デザインとスクリプト記述を分業する場合などはファイルを分ける方がいいだろう

画面書き換え(Ajax) (2007/02/09 10:00) 0 comment

prototype.js では $('id名') で、HTMLドキュメント要素にアクセスすることができる。
$() は頻発する DOM の document.getElementById() 関数へのショートカットである。
要素の innerHTML、value、style プロパティを使って参照・更新することができる

    Event.observe(window, 'load', 初期化);
    function 初期化()
    {
        $('メッセージ領域').innerHTML = "hello, Ajax.";
    }
    ....
    <div id="メッセージ領域"></div>

上の例は、ページロード時、"id=メッセージ領域" の <div></div>で囲まれた部分に "hello, Ajax." という文字列を挿入する。(参照:ページ
最初から <div id="メッセージ領域">hello, Ajax.</div> と記述したのと何も変わらないではないかと思われるかもしれないが、
このテクニックを使えば、ボタンクリックなどのイベントが発生したときに画面を動的に変更することができるのだ。

イベントによる画面書き換え(Ajax) (2007/02/09 10:11) 0 comment

さて、次はボタンが押されたら画面を更新する方法:
prototype.js では、Event オブジェクトの observe(element, name, observer, useCapture) メソッドにより、
イベントハンドラ(イベントが発生した時にコールされる関数のこと)を登録するとこができる。

element はイベントを発生させるオブジェクトそのものまたはIDを指定
name はイベント名。'click', 'load' など、'on' を除いた文字列で指定
obsever はイベントハンドラ関数
最後の useCapture 引数は省略可能で、true ならcapture 段階でイベントを処理する
(意味がいまいちわからないので、使うときは省略しておくことにする ^^;;;)

    Event.observe(window, 'load', 初期化);
    function 初期化()
    {
        Event.observe('mess2', 'click', メッセージ2を表示);
    }
    function メッセージ2を表示()
    {
        $('メッセージ領域').innerHTML = "message-2";
    }
    ....
    <input type=button id="mess2" value="mess-2"></input>
    <div id="メッセージ領域"></div>

上の例は【mess-2】というボタンを押すと、その下のメッセージ領域に「message-2」と表示するものだ。>参照
onload でイベントハンドラ(メッセージ2を表示)を登録し、id="mess2" のボタンが押されたら、ハンドラが呼ばれるようにする
ボタンが押されると、"メッセージ2を表示" 関数が呼ばれ、メッセージ領域のHTMLを書き換える、とう寸法だ
ちなみに関数名は上記のように日本語にすることができる
まだ慣れないので違和感がなくもないが、なれるとわかりやすいような気もする

ちなみに、素の JavaScript では以下のように、ボタンに直接イベントハンドラを指定することもできる
<input type=button id="mess1" value="mess-1" onClick="mess1Func()"></input>

イベントを発生させるHTML要素の方でイベントハンドラを指定する方が単純でわかりやすいかもしれない。
しかし、HTML要素とハンドラの関係が固定的なるし、ドキュメントの構成要素(HTML)と動作(JavaScript)を分離していないという短所がある。

サーバからデータを取得して表示… (2007/02/09 13:01) 0 comment

次にサーバからデータを取得し、それを表示する方法

prototype.js にはサーバへHTTPリクエストを出し、返答が帰ってくると指定ハンドラを呼び出す機能がある。
それが Ajax.Request クラスだ
Ajax.Request はクラスなので、new でインスタンス化して使用する。
引数でURL、HTTPメソッド、パラメータ、ハンドラを指定する。
    var myAjax = new Ajax.Request(
                url,
                {
                    method: 'get',
                    parameters: pars,
                    onComplete: showResponse,
                    onFailure: エラー処理
                });
こんな感じだ。
※ 引数がURLとそれ以外に分かれているのは、URL以外は場合によっては省略できるからだ(と思う)
サーバから応答が帰ってくると function showResponse(httpObj) がコールされる
応答はハンドラへ渡される引数 httpObj に入っており、httpObj.responseText で参照することができる

たとえば、以下のように書いておけば応答テキストをそのまま画面に表示することができる
    function showResponse(httpObj)
    {
        $('res').innerHTML = httpObj.responseText;
    }

サーバからのデータ書式(Ajax) (2007/02/09 13:25) 0 comment

サーバから返すデータが単純であれば、プレーンテキストやHTMLそのものでも構わないが、
ある程度複雑な構造を持っている場合は、それらでは取り扱いが難しい
Ajax とは Asyncronous JavaScript + XML の略なので、XML 形式のデータを用いるのが本筋かもしれないが、
JavaScript で操作することを考えると、JSON (JavaScript Object Notation) と呼ばれる、
JavaScript のオブジェクト記述形式(直訳ですな)を用いるのが便利だ

JSON:
オブジェクトは { } で囲み、プロパティ名: 値 をカンマ区切りで列挙する
配列は [ ] で囲み、要素 をカンマ区切り列挙する

たとえば、名前と年齢の組のデータは以下のように記述できる
[ {name:"shin'ji", age:14}, {name:"Rei", age:14}, {name:"Misato", age:29} ]

サーバがJSONのデータを返す場合、eval() 関数を使ってJavaScriptオブジェクトに変換する。
    function showResponse(httpObj)
    {
        var resObj = eval(httpObj.responseText);
        ....
    }
あとは通常のJavaScriptオブジェクトとして参照するなり変更するなり好きにすることができる
先の例であれば、resObj.length で配列要素数を取得、resObj[i] で i 番目の要素、
resObj[i].name、resObj[i].age で i番目の要素の名前、年齢を参照できる

ちなみにXML形式の場合は、
    var resXML = httpObj.responseXML;
で XMLオブジェクトを取り出し、getElementsByTagName() などの DOMメソッドを使ってデータを参照・更新する
これはこれで便利なのかもしれないが、いろいろなDOMのメソッドを覚えなくてはいけない
JSONであれば、JavaScript だけ覚えていればいいので記憶容量の低下したおじさんには楽チンである

状態の保持(Ajax) (2007/02/09 21:06) 0 comment

何らかの値をページとして保持したい場合がある
その方法として以下の3つが考えられる
(1) タグで囲まれた部分に値を記述
(2) タグの value で値を保持
(3) JavaScript 変数で値を保持

(1) は以下のように値を記述しておき、$('ansArea').innerHTML で参照する
<div id="ansArea">0</div>
(2) は以下のように値を記述しておき、$('val').valueL で参照する
<div id="val" value="0" />
(3) は JavaScript のグローバル変数を宣言し、それで値を保持する
var g_val = 0;

保持している値を常に画面に表示するのであれば、(1) が自然な方法である
画面に表示したくないのであれば、(2), (3) がよい。(2) はちょっとトリッキーな感じがするし、
複雑なデータ処理の場合も素直に記述できるので、個人的には (3) がお勧めだ

それぞれの使用例は (1),  (2),  (3) を参照

7件の日記があります。

パスワード忘れ
今週のランキング
計算タマちゃん
FAQ
ヘルプ
about rrdOnline