将棋盤に Ajax を用いる
棋譜の表示に 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); } } }