将棋盤に Ajax を用いる
2008年5月26日0:14
将棋
棋譜の表示に Ajax の手法を使ってみた。
まずは棋譜を選択する機能を実装。
再描画はチラつきも発生せず問題無い。
ということは棋譜だけ自由にGETできると云うこと。
たとえば実況中継などの頻繁に更新される棋譜でも OK だろう。
とりあえず使えることは解った。ありがたや^^;
でも、深入りはしない。

HTML のセレクト文は以下のようにし、
DTML のプロパティ game_uri には棋譜を保存してあるフォルダの URI を設定して置く。

<body onLoad='createDiag()'>
  <form action="" method="get" name="selectGame">
    <select onchange="queryScore()">
    <dtml-with "restrictedTraverse(getProperty('game_uri'))">
    <dtml-in "objectValues('ZShogi')">
      <option value="&dtml-absolute_url;"><dtml-var title_or_id></option>
    </dtml-in>
    </dtml-with>
    </select>
  </form>
</body<

JavaScript で HTML の 'GET' をおこなう箇所は以下の通り。

var xmlhttp = false;
  if (window.XMLHttpRequest) {
    xmlhttp = new XMLHttpRequest();
    xmlhttp.overrideMimeType('text/plain');
  } else {
    try {
      xmlhttp = new ActiveXObject('Msxml2.XMLHTTP');
    } catch (e) {
      try {
        xmlhttp = new ActiveXObject('Microsoft.XMLHTTP');
      } catch (e) {
        xmlhttp = false;
      }
    }
  }

  var scorelist = 'void'; 
  function queryScore() {
    var game = document.selectGame.elements[0].value;
      var url = game + '/pubGetScore';
      xmlhttp.open('GET', url, true);
      xmlhttp.onreadystatechange = updateDiag;
      xmlhttp.send(null);
  }
  function updateDiag() {
    if (xmlhttp.readyState == 4) {
      if (xmlhttp.status == 200) {
        scorelist = xmlhttp.responseText;
        createDiag();
      } else {
        alert('updateDiag: http status=' + xmlhttp.status);
      }
    }
  }

参考サイト

owa #e8faefa 2008年5月26日23:48

IE6 対応で修正。
JavaScript でエラーが発生するので const はやめて var 変数に変更。
透明部分の処理が変なので駒の画像を作り直した。