2008/02/23

XMLHttpRequest_1.0をリリース

coldfusion 8から、coldfusion.ajax.submitFormという新しい関数が追加されて、同じような機能をもった関数を7でも実装できないかなーって思い、なんとなく作ってみました。

<CFFUNCTION name="XMLHTTPRequest">
<CFOUTPUT>
<SCRIPT type="text/javascript">
function js_XMLHttpRequest(url,func,ahttpMethod,aasynch) {
  var httpObj = "";
  var ret = "";
  var httpMethod = "GET";
  var asynch = true;

  /* quoted Prototype JavaScript framework, version 1.5.1.1 */
  var Prototype = {
   Browser: {
   IE: !!(window.attachEvent && !window.opera),
   Opera: !!window.opera,
   WebKit: navigator.userAgent.indexOf('AppleWebKit/') > -1,
   Gecko: navigator.userAgent.indexOf('Gecko') > -1 && navigator.userAgent.indexOf('KHTML') == -1
   }
  };

  if(ahttpMethod != null){
    if(ahttpMethod.toUpperCase() == "POST"){
      httpMethod = "POST";
    }
  }

  if(aasynch != null){
    if(aasynch == false){
      asynch = false;
    }
  }
  if(Prototype.Browser.IE){
    httpObj = new ActiveXObject("Msxml2.XMLHTTP");
    httpObj.open(httpMethod,url,true);
    httpObj.onreadystatechange = function (){
     if(httpObj.readyState == 4 && httpObj.status == 200){
     ret = httpObj.responseText;
     func(ret);
     }
    };
  }else{
    httpObj = new XMLHttpRequest();
    httpObj.open("GET",url,asynch);
    httpObj.onload = function(){
     ret = httpObj.responseText;
     func(ret);
    };
  }
  httpObj.send(null);
}

</SCRIPT>
</CFOUTPUT>
<CFSETTING SHOWDEBUGOUTPUT="no">
</CFFUNCTION>

とまぁー、このような形で作成しました。

この関数をcfsetで関数を作り出し、後は、javascriptで関数を呼び出せば、オッケー♪
ちなみに、javascriptで呼び出すときは、こんな感じ。

<SCRIPT type="text/javascript">
  var hoge = function(text){
    ...
  }
</SCRIPT>
<A href="javascript:js_XMLHttpRequest('test.cfm',hoge)">Ajax呼び出し</A>

js_XMLHttpRequestに関して、後二つ引数を追加することができて、一つ目は、送信方法。POSTかGETを選択することができて、デフォルトでは、GETになっています。

二つ目は、非同期か同期かを選択する変数で、デフォルトでは、非同期になっています。

うーん、8と比べて忠実に再現できなかったのは、最後、コールバック関数を呼び出すときに、ローカルでは無名関数を定義しないといけないところ。

8では、名前の入った関数を定義すれば、そこに値を返してくれたのですが。

まぁー、そこまででかい差ではないのですが。。。

この関数を使うことで、わざわざ、xmlHttpリクエストを投げるオブジェクトを作成しなくても、urlと関数名さえ指定すれば自動的に非同期でデータを取得できるところ。

せっかく作ったので、coldfusion-addonにもXMLHttpRequest_1.0.cfmとして、アップロードしました。

次は、設計書を作っていきたいと思います。

0 コメント:

コメントを投稿