JPSpanでHelloWorld

2006/03/30

JPSpanでajaxを使おうへ戻る

自分の練習のため、ajaxライブラリの1つ = JPSpanでHelloWorldスクリプトを作ってみました。

JPSpanはサーバ側とクライアント側をそれぞれ別ファイルとするのがセオリーのようで、このサンプルでもそうしています。

ここでは、それ以外のことはできる限り排除して、JPSpanの雰囲気がわかるようにしたつもりです。


このサンプルの仕様について

説明するほどのものではありませんので、ここに設置してありますので、見てくださいな。


サーバ側 server.php

PHPスクリプトです。今回のような単純な場合でもサーバ側はダラダラと長くなっています。
ですが、決まりきったところがほとんどです。

<?php
/**
 * @file
 * @brief JPSpanのHelloWorldサンプル (サーバ側)
 */

// JPSpanの読み込み
require_once 'JPSpan/JPSpan.php';
require_once JPSPAN . 'Server/PostOffice.php';

// PostOfficeサーバのインスタンス生成
$S = & new JPSpan_Server_PostOffice();

///////////////////////////////////////////////////////
// ここから上は、毎回変わらない
///////////////////////////////////////////////////////
// 今回、利用するクラスの定義 class HelloWorld { // 時刻を返すメソッド function GetTime() { return "Hello " . date('H:i:s'); } } // クラスをJPSpanハンドラに登録 // これでHelloWorldクラスのGetTime()メソッドがJavaScriptから利用可能となる $S->addHandler(new HelloWorld());
/////////////////////////////////////////////////////// // ここから下は、毎回変わらない /////////////////////////////////////////////////////// if (isset($_SERVER['QUERY_STRING']) && strcasecmp($_SERVER['QUERY_STRING'], 'client')==0) { // JavaScriptコードの表示 $S->displayClient(); } else { // エラーハンドラの呼び出し require_once JPSPAN . 'ErrorHandler.php'; // サーバ動作開始 $S->serve(); } ?>

クライアント側 index.html

<html>
<head>
<!-- JPSpanのクライアントコードを取得 -->
<script type='text/javascript' src='server.php?client'></script>

<script type='text/javascript'>

// コールバック関数の配列を生成
var MyCallBack = {
    gettime: function(result) { idTime.innerHTML = result; }
}

// PHP側クラスの生成
var php_class = new helloworld(MyCallBack);

</script>
</head>

<body>

<p>
  <input type=button value="GetTime" onclick="php_class.gettime()">
  クリックするとPHPのHelloWorldクラスで定義されているGetTime()メソッドを呼び出します。
</p>

<div id=idTime></div>

</body>
</html>

JPSpanでは、PHP側で定義したクラス名を、JavaScript側で小文字にしてnewする必要があるようです。
このサンプルでは、サーバ側のクラスが「HelloWorld」ですが、JavaScriptでnewしているのは「helloworld」です。
(これがわかるまで、ずいぶんかかりました)

JavaScript側では、helloworldクラスをnewするときに、コールバック関数の配列を渡す必要があります。
このときもPHP側で大文字のメソッド名を書いていても、JavaScript側では小文字のメソッド名にする必要があるようです。
このサンプルではサーバ側のPHPでは「GetTime()」ですが、JavaScriptでは「gettime」としています。

Copyright©2001-2008 釣ったよ! All Right Reserved.    sg@tsuttayo.sytes.net