Skip to main content

再ロードなしのページの更新

最新のブラウザはすべて、サーバからデータを要求するための組み込みの XMLHttpRequest オブジェクトを備えています。このオブジェクトによって、ページの読み込み後にサーバと対話し、再ロードすることなくページを更新することが可能になります。

InterSystems IRIS® データ・プラットフォームでは、CSP ページ内でこのオブジェクトを使用して、CSP サーバと直接通信するための簡単なシステムを提供します。

基本情報

このシステムには、以下の 3 つの部分があります。

  • HTML ページの <head> 部分を生成する際に、HyperEventHead() を呼び出します。これにより、このシステムで必要とされる 2 つの連続した <script> 要素で構成される文字列が返されます。メソッド・シグニチャは以下のとおりです。

    classmethod HyperEventHead(iframeOnly As %Boolean, 
                               strict As %Boolean = 0) as %String
    

    以下はその説明です。

    • iFrameOnly 引数は無視されますが、互換性のために存在しています。

    • strict が 1 の場合、返される文字列では厳密な HTML 4 形式の <script> タグが使用されます。

  • 呼び出しを行う (サーバ側の) メソッドを作成します。このメソッドはインスタンス・メソッドである必要があり、リテラル値 (OREF ではない) を返すことができます。参照渡しにより、または出力として引数を渡すことはできません。

    Tip:

    XMLHttpRequest を使用する一般的な理由はページを変更することであるため、このメソッドがページに追加する完全に形成された HTML を返すと役に立つ場合があります。

  • 該当する場合は、ページの HTML の一部として、HyperEventCall() を使用してメソッドを呼び出し、その呼び出しの結果を使用する JavaScript 関数を定義してください。

    HyperEventCall() メソッドには、以下のシグニチャがあります。

    classmethod HyperEventCall(methodName As %String, 
                               args As %String, 
                               type As %Integer = 0) as %String
    

    以下はその説明です。

    • methodName はサーバ・メソッドに対する参照で、メソッドが同じクラスに存在する場合は ..MethodName() の形式、存在しなければ、より長い Package.Class.MethodName の形式を取ります。

    • args には、メソッドに渡すすべての引数が含まれます。args は、変数のコンマ区切りリストを含む引用符で囲まれた文字列です (JavaScript 関数内で定義済み)。

    • type が 1 の場合 (推奨)、呼び出しは非同期になります。

    HyperEventCall() は、サーバ・メソッドにより返される値を返します。

これらがどのように組み合わされるかを例で示します。このシナリオでは、ツリー・コントロールの追加部分を取得する関数を定義します。この関数は、%CSP.Documatic.Helper という名前のクラスの GetChildren() メソッドを使用します。このメソッドは、nameparent、および ns の 3 つの文字列引数を取り、ツリー・コントロール内のページに追加するための完全に形成された HTML を返します (ここでは、このツリー・コントロールが具体的にどのように機能するか、またはこのメソッドが厳密に何を行うかということは重要ではありません)。

この HTML ページの <head> を生成するコード内で、以下のように HyperEventHead()HyperEventCall() の両方を呼び出します。

 //Add hyperevent-related scripts for left navigation
 set headhtml=_..HyperEventHead()
  _"<script>function addChildrenAfter(item,name,Id,ns) {"
  _"var h="_..HyperEventCall("%CSP.Documatic.Helper.GetChildren","name,Id,ns",1)_";"
  _"if (h!==null) {"
  _"item.insertAdjacentHTML('afterend',h); } else {"
  _"location.reload();}"
  _"return false;"
  _"}</script>"

結果として生成される HTML は以下のようになります (読みやすくするため改行が追加され、編集されています)。

<script type="text/javascript" src="/somelocation/csp/broker/cspxmlhttp.js">
</script>
<script type="text/javascript" src="/somelocation/csp/broker/cspbroker.js">
</script>
<script>function addChildrenAfter(item,name,Id,ns) 
{var h=cspHttpServerMethod("pyK473ekNn0...very long...DOKepQ",name,Id,ns);
if (h!==null) {item.insertAdjacentHTML('afterend',h);
 } else {location.reload();
}return false;}</script>

この HTML にはサーバ・メソッドの名前は含まれませんが、代わりにサーバが実行するコードの特定に使用する長いトークンが含まれます。また、この HTML には cspHttpServerMethod も含まれることに注意してください。これは、HyperEventHead() により提供される JavaScript 関数です。

FeedbackOpens in a new tab