Domino で ajax

ajax には興味ありありで。

Domino の Web アプリは、とにかく何の操作をするにもページ全体を再送するもんだから待ち時間が長くてかなわん。

Domino Web Access (iNotes) という名のメール機能に関しては、デザインとデータがかなり分離されてて、これも ajax なのだろうか、ページの一部分だけがダイナミックに書き換わるのでなかなか便利なんですけど、ページ全体のコード量が多すぎてPCが遅いとこれまた操作毎に待たされる。

そんな感じで、手軽なのを求めて実験。

まずは、Domino の Web アプリでユーザ名の補完っぽいことを。 タイプした英字に従ってドミノディレクトリから抽出して候補を表示します。

テキトーにDB作って、フォーム作って、JS Header の所に以下のコードを書きます。フォームの所には、パススルーHTMLで以下のHTMLを書きます。

そのフォームをブラウザで開いたら ( 今回は技術力の低さから IE 限定で ) 共通名欄にポツポツとキー入力すると、検索結果が下の枠内に出ます。

出るはずです。 Domino 6 なら行けるはずです。 というサンプル。

_ サンプル: JS Header

function handleHttpResponse() {
    if (xmlHttp.readyState == 4 && xmlHttp.status == 200) {
        var xmlDoc = xmlHttp.responseXML;
        listnum  = xmlDoc.documentElement.childNodes.length;
        document.getElementById('sel1').length = listnum;
        document.getElementById('sel1').size   = listnum;
        for (i=0;i<listnum;i++){
             document.getElementById('sel1').options[i].text = xmlDoc.documentElement.childNodes[i].childNodes[4].childNodes[0].firstChild.data;
        }
    }
}

function getAddrss() {
    var name    = document.getElementById('name').value;
    var dispnum = document.getElementById('dispnum').value;
    var urlcmd = '/names.nsf/People?ReadViewEntries&count=' + dispnum + '&PreFormat&StartKey=' + name;
    xmlHttp.open('GET', urlcmd);
    xmlHttp.onreadystatechange = handleHttpResponse;
    xmlHttp.send(null);
}

function createXMLHttp(){
  try {
    return new ActiveXObject ("Microsoft.XMLHTTP");
  }catch(e){
    try {
      return new XMLHttpRequest();
    }catch(e) {
      return null;
    }
  }
  return null;
}

var xmlHttp = createXMLHttp();

_ サンプル: HTML 部分

<p>
  共通名: <input type="text" size="20" name="name" id="name" onkeyup="getAddrss();" />
  表示数: <select name="dispnum" id="dispnum">
    <option selected value="10">10</option>
    <option value="20">20</option>
    <option value="50">50</option>
  </select>
</p>
<p>
  <select name="sel1" id="sel1">
  </select>
</p>