Webアプリ開発エンジニアのための技術情報サイト「テックスコア」

2. AjaxとSVGの組み合わせ1

2006.04.18 株式会社四次元データ 藤本将光

Ajax の解説資料はすでに多いので、ここでは、SVG(Scalable Vector Graphics)とAjaxを組み合わせて利用する方法を紹介しましょう。SVGはXML文書であり、JavascriptやDOMと組み合わせることによって、動的な表現が可能であることから、XML形式のデータをJavaScriptで処理しているAjaxと組み合わせることが可能です。
具体的には、AjaxにおけるXMLオブジェクトの作成などの関数と同様に、JavaScript内でSVGドキュメントに与える関数を記述し、それらをSVG文書の中に組み込むことによって、Ajaxと組み合わせることができます。
本章では、SVG画像上でデータを取得し、html上にデータを表示するサンプルを説明しています。

2.1. サンプル1

まず、実際のサンプルを見てみましょう。


まず、赤色の正方形の上にマウスを乗せ、その後に、青色の正方形の上にマウスを乗せてみてください。

テキストエリア内に「4DD company」の文字が入力されます。

この例では、SVG内の赤い四角形にマウスが乗っているときに、非同期通信で添付したテキストファイルからデータを取得し、青い四角形にマウスが乗ったときに、テキストエリアにデータを表示させています。

では、サンプルのソースを見てみましょう。

2.2. サンプル1のソース

このサンプルでは、SVGファイルは単独の文書として作成し、作成したファイルをembedタグを利用してhtmlファイルに組み込んでいます。

以下に、サンプルのhtmlファイル、SVGファイルのソースを示します。

2.2.1. htmlファイルのソース

<head>
 <script language="JavaScript">
  <!--
     // XMLHttpRequestオブジェクト生成
    function createHttpRequest()
    {
        if(window.ActiveXObject){
             //Win e4,e5,e6用
        try {
            return new ActiveXObject("Msxml2.XMLHTTP") ;
        } catch (e) {
        try {    
            return new ActiveXObject("Microsoft.XMLHTTP");
                 } catch (e2) {
            return null ;
             }
        }
        } else if(window.XMLHttpRequest){
             //Win Mac Linux m1,f1,o8 Mac s1 Linux k3用
            return new XMLHttpRequest() ;
        } else {
            return null ;
        }
    }
    function getData(pageURL)  ・・・(1)データ送受信時の関数
         {
          oj = createHttpRequest(); 
         if (oj)
          {
             oj.onreadystatechange = setPageData;
             oj.open('GET', pageURL,true);
             oj.send(null);
          }else{
          alert("XMLHttpRequest失敗");
           }
          }
    var restext;
    function setPageData()
        {
         if (oj.readyState == 4 )
           {
            restext  = oj.responseText;
           }
        }
    function writeText() ・・・(2)受信データのテキストエリアへの入力の設定
        {
          document.myArea.result.value += restext+"\n";
        }
    
 //-->
</script>

</head>
<embed src="sample2.svg" height="300" width="500" name="theSVG"><br> ・・・(3)SVGファイルの組み込み
<form name="myArea">
<textarea rows="10" cols="30" type="text" name="result" ></textarea>
</form>

2.2.2. SVGファイルのソース

<svg xml:space="preserve" width="600" height="300" >
    <rect id="bg" x="0" y="0" width="3000" height="2500" fill="yellow"/> 
    <rect id="rect" x="100" y="150" width="50" height="50" fill="red" 
               onmouseover="getData('test.txt')"/>  ・・・(4)        
    <rect id="rect1" x="300" y="150" width="50" height="50" fill="blue" 
               onmouseover="writeText()"/>  ・・・(5)
    <text x="50" y="50" id="mytext" style="visbility: visible; fill: black; font-family: Serif; 
               font-size: 24">4DD</text> 
    <text x="250" y="50" id="mytext1" style="visibility: visible; fill: black; font-family: Serif; 
               font-size: 24">4DD Company</text> 
</svg>

このサンプルは、データの送受信の部分(script内部の部分)は、1章で示した「簡単なサンプル」と同じです。

(1)において、非同期通信におけるデータ送受信時のの関数の設定、(2)において、受信したテキストデータをテキストエリアに表示させる関数を記述しています。

これらの関数をSVGファイル内に記述することによって、SVG画像を介した非同期通信を行っています。

SVGファイル内では、(4)において、赤い四角形上にマウスが乗っているときに、(1)で記述した非同期通信によって、データの送受信を行う関数をイベントとして与えています。
また、(5)において、青い四角形上にマウスが乗ったときに、(2)で記述した取得したテキストデータをテキストエリアに表示させる関数をイベントとして与えています。



前のページへ TECHSCOREのTOPページへ 次のページへ
techscore(トップページへ)
TECHSCORE書店
TECHSCOREトップページJavaSQLXMLリッチクライアントモデリングセマンティックWebその他技術Tuigwaa