連載:Microsoft AJAX Library&JavaScriptプログラミング

最終回 MS AJAX Libのユーティリティ機能を活用しよう

山田 祥寛(http://www.wings.msn.to/
2008/05/30
Page1 Page2 Page3

[コラム]PHP for Microsoft AJAX Library

 本文でも述べたように、Sys.Net.WebRequestオブジェクトはXMLHttpRequestオブジェクトのごく薄いラッパーである。クロスブラウザを意識せずにより直感的なコードを記述できるという意味では、十分に意味のあるオブジェクトではあるが、昨今のリッチなライブラリと比較すると、やや物足りなく感じる面もあるかもしれない。

 そのような方は(そして、サーバサイド環境としてPHPを利用しているならば)、「PHP for Microsoft AJAX Library(以降、PHP AJAX Lib)」の導入を検討してみてもよいかもしれない。これはMS AJAX LibをベースとしたPHP環境向けのライブラリで、PHPスクリプトで書かれたクラスに対して、クライアントサイド・スクリプト(JavaScript)から透過的にアクセスするための機能を提供する。「.NET TIPS:[ASP.NET AJAX]ASP.NET AJAXのブリッジ機能」をPHP環境に移植したもの、といい換えてもよいかもしれない。

 PHP AJAX Libを利用するには、CodePlexのページから必要なライブラリをダウンロードする必要がある。また、PHP AJAX LibにはMS AJAX Libそのものは含まれていないので、あらかじめ別に入手/配置しておく必要がある*4

*4 ただし、執筆時点でのPHP AJAX Libは最新のMS AJAX Lib 3.5には対応していないようだ。代わりに、ASP.NET AJAX 1.0を入手し、これに含まれるMS AJAX Lib 1.0を使用する必要がある。

 PHP AJAX Libを動作させるには、ダウンロードしたアーカイブに含まれるMSAjaxProxyGenerator.php/MSAjaxService.phpを公開フォルダに配置するだけだ。ここでは、先ほどのyahoo.php/yahoo.htmlをPHP AJAX Libを使って書き直してみよう。

[1]サービス・クラスを定義する

 PHP AJAX Libを利用するには、まずクライアントサイドに公開するサービス・クラスを定義しておく必要がある。これはASP.NET AJAXにおける.asmxファイルに相当するものだと考えればよいだろう。

<?php
require_once 'MSAjaxService.php';

class YahooSearch extends MSAjaxService {
  function getInfosByKeyword($keywd) {
    $opt = array(
      'appid'   => 'wings-project',
      'results' => 20,
      'query'   => $keywd
    );
    $url =
      'http://api.search.yahoo.co.jp/WebSearchService/V1/webSearch?'
                                         .http_build_query($opt);
    $xml = simplexml_load_string(file_get_contents($url));

    // サービスからの応答(結果XML)に基づいて連想配列を生成
    $result = array();
    foreach($xml->Result as $data) {
      $result[] = array(
        'title' => strip_tags($data->Title),
        'url' => strip_tags($data->Url),
        'summary' => strip_tags($data->Summary)
      );
    }
    // 生成された連想配列を戻り値として返す
    return $result;
  }
}

$yahoo = new YahooSearch();
$yahoo->ProcessRequest();
リスト8 YahooSearch.php

 サービス・クラスを定義する場合、注意すべきポイントは以下の3点だけだ。

MSAjaxService.phpをインポートすること

MSAjaxServiceクラスを継承した派生クラスを定義すること

ProcessRequestメソッドを呼び出すこと

 これらのルールを押さえてさえいれば、後はごく普通のクラス定義と同様に記述できる。ちなみに、ProcessRequestメソッドは、MSAjaxServiceクラスがもともと公開しているメソッドで、クライアントからの要求に応じて、サービス・クラスへのアクセスに必要なプロキシ・クラス(代理クラス)やサービス・メソッドの結果を返すためのものだ。

[2]クライアント・ページを作成する

 このサービス・クラスにアクセスするには、次のようなクライアント・ページを用意すればよい。

<html>
<head>
<meta http-equiv="Content-Type" content="text/html; charset=UTF-8" />
<title>Yahoo! ウェブ検索Webサービス</title>
<script type="text/javascript" src="./lib/MicrosoftAjax.js"></script>
<script type="text/javascript" src="YahooSearch.php/js"></script>
<script type="text/javascript">
<!--

function search() {

  YahooSearch.getInfosByKeyword(

    $get('keywd').value,

    function(result) {
      var sb = new Sys.StringBuilder();
      sb.append('<dl>');

      for(var i = 0; i < result.length; i++){
        sb.append('<dt><a target="_blank" href="');
        sb.append(result[i].url);
        sb.append('">');
        sb.append(result[i].title);
        sb.append('</a></dt><dd>');
        sb.append(result[i].summary);
        sb.append('</dd>');
      }
      sb.append('</dl>');
      $get('result').innerHTML = sb.toString();
    },
    function(ex) {
      window.alert('予期せぬエラーが発生しました。');
    }
  );
}

//-->
</script>
</head>
<body>
<form name="fm">
キーワード:
<input type="text" name="keywd" size="15" />
<input type="button" value="検索" onclick="search()" />
<hr />
<div id="result"></div>
</form>
</body>
</html>
リスト9 yahooSearch.html

 クライアント・ページを記述するには、まず<script>タグでサービス・クラスにアクセスするためのプロキシ・クラスを呼び出す必要がある( )。プロキシ・クラス呼び出しの構文は「<PHPファイル名>/js」である。

 プロキシ・クラスが有効化されてしまえば、後は、これをJavaScriptのコードから呼び出すだけである( )。プロキシ・クラス呼び出しの一般的な構文は以下のとおり。

クラス名.メソッド名(
  [パラメータ, ……]
  ,処理成功時に呼び出されるコールバック関数
  [,サービス側で例外が発生した場合に呼び出されるコールバック関数
    [,任意のコンテキスト値]
  ]
)
プロキシ・クラスの一般的な呼び出し構文

 この構文は、別稿「.NET TIPS:[ASP.NET AJAX]クライアントサイド・スクリプトからXML Webサービスを非同期呼び出しするには?(クライアントサイド編)」で紹介しているものと同等であるので、引数の詳細はこちらも併せて参照いただきたい。

 いかがだろうか。ASP.NET AJAXのブリッジ機能を理解している方ならば、PHP AJAX Libを利用することで、ほぼ同じ要領でコードを記述できることがお分かりいただけるはずだ。

 以上を理解したら、さっそく作成したサンプル・プログラムを実行してみよう。本文サンプルと同様の結果が得られれば成功である。End of Article

 

 INDEX
  Microsoft AJAX Library&JavaScriptプログラミング
  最終回 MS AJAX Libのユーティリティ機能を活用しよう
    1.文字列連結を効率的に行うには?/オブジェクトの内容を確認するには?
    2.MS AJAX Libは非ASP.NET環境でも利用可能
  3.[コラム]PHP for Microsoft AJAX Library
 
インデックス・ページヘ  「Microsoft AJAX Library&JavaScriptプログラミング」


Insider.NET フォーラム 新着記事
  • 第2回 簡潔なコーディングのために (2017/7/26)
     ラムダ式で記述できるメンバの増加、throw式、out変数、タプルなど、C# 7には以前よりもコードを簡潔に記述できるような機能が導入されている
  • 第1回 Visual Studio Codeデバッグの基礎知識 (2017/7/21)
     Node.jsプログラムをデバッグしながら、Visual Studio Codeに統合されているデバッグ機能の基本の「キ」をマスターしよう
  • 第1回 明瞭なコーディングのために (2017/7/19)
     C# 7で追加された新機能の中から、「数値リテラル構文の改善」と「ローカル関数」を紹介する。これらは分かりやすいコードを記述するのに使える
  • Presentation Translator (2017/7/18)
     Presentation TranslatorはPowerPoint用のアドイン。プレゼンテーション時の字幕の付加や、多言語での質疑応答、スライドの翻訳を行える
@ITメールマガジン 新着情報やスタッフのコラムがメールで届きます(無料)

注目のテーマ

Insider.NET 記事ランキング

本日 月間