にっき

2006/10/12 17:24:09

あくてぃぶXと謎のおぶじぇくと


あじゃこんぐさんとこでもちょっとだけ出てきた
javascriptのXMLHttpRequestおぶじぇくとを使って創ってたらいつの間にか



/**
 *  @package HttpRequestUtils
 *  
 *  @author  mumin
 *  @version 1.0
 * 
 *  @requires XMLHttpRequest / ActiveXObject
**/
var HttpRequestUtils =
{
 /**
  *  init
  * 
  *  @param   void
  * 
  *  @return  void
 **/
 init : function()
 {
  if(typeof XMLHttpRequest == 'undefined' && typeof ActiveXObject == 'function')
  {
   XMLHttpRequest = function()
   {
    var obj = this;
    var ps  = ['readyState','status','statusText','responseText','responseXML'];
    try
    {
     this.nativeObject = new ActiveXObject('Msxml2.XMLHTTP');
    }
    catch(e)
    {
     this.nativeObject = new ActiveXObject('Microsoft.XMLHTTP');
    }
    this.readyState                      = 0;
    this.onreadystatechange              = function(){};
    this.nativeObject.onreadystatechange = function()
    {
     for(var p in ps)
      try
      {
       obj[ps[p]] = obj.nativeObject[ps[p]];
      }
      catch(e)
      {
      }
     obj.onreadystatechange();
    };
   }
   var ms = ['open','setRequestHeader','getResponseHeader','getAllResponseHeader','send','abort'];
   for(var m in ms)
    HttpRequestUtils.setMethod(ms[m]);
  }
 },

 /**
  *  setMethod
  * 
  *  @param   string  nam   // methodName
  * 
  *  @return  void
 **/
 setMethod : function(nam)
 {
  XMLHttpRequest.prototype[nam] = function()
  {
   var args = new Array(arguments.length);
   for(var i = 0;i < args.length;i++)
    args[i] = 'args_' + i;
   return Function(args.join(','),'return this.nativeObject.' + nam + '(' + args.join(',') + ')').apply(this,arguments);
  };
 },

 /**
  *  getClient
  *  
  *  @param   string  mod  // methodMode
  *  @param   string  adr  // targetAddress
  *  
  *  @return  HttpRequestObject
 **/
 getClient : function(mod,adr)
 {
  var cli = null;
  try
  {
   cli = new XMLHttpRequest();
  }
  catch(e)
  {
   cli = null;
  }
  if(cli != null)
  {
   cli.open(mod,adr);
   cli.setRequestHeader('content-type','application/x-www-form-urlencoded; charset=UTF-8');
   cli.callbacks = {'unknown' : HttpRequestUtils.isUnknown};
   cli.onreadystatechange = function()
   {
    if(cli.readyState == 4)
    {
     var res = {'txt' : cli.responseText,'xml' : cli.responseXML};
     try
     {
      cli.callbacks[cli.status.toString()](res);
     }
     catch(e)
     {
      cli.callbacks['unknown'](res);
     }
    }
   }
  }
  return cli;
 },

 /**
  *  encodeString
  * 
  *  @param   array  val
  * 
  *  @return  string
 **/
 encodeString : function(val)
 {
  var arr = new Array();
  for(k in val)
   arr.push(k + '=' + encodeURIComponent(val[k]));
  return arr.join('&');
 },

 /**
  *  parseJson
  * 
  *  @param   string  txt
  * 
  *  @return  object
 **/
 parseJson : function(txt)
 {
  return eval('(' + txt + ')');
 },

 /**
  *  isUnknown
  *
  *  @param   array  res {'txt','xml'}
  *  
  *  @return  void
 **/
 isUnknown : function(res)
 {
 }
};

window.onload = HttpRequestUtils.init;

こんなになっちゃったにう(´ω`;【壁
IE6までのActiveXおぶじぇくとはしすてむ依存の謎おぶじぇくと(typeofでぷろぱてぃたいぷを調べるとunknownになる)
ってことでほとんどの値にぷろてくとがかかっててjavascriptからじゃ操作できないし
IE7ならXMLHttpRequestおぶじぇくとが使えるんだけど・・・
根本はあんまり変わってないみたいでXMLHttpRequestにprototype指定しようとすると怒られちゃう
ってjavascriptのでばっぐが難しいIEに限って問題がいっぱいだったにう(つx;【みかん
いちおういんすたんすを生成してからはちゃんとjavascriptで操作できるようになってたから
らっぱを創るまでもないかなぁ?ってことでclientを生成するときにぺったんするってことで・・・

<script type="javascript" src="すくりぷと.js">

こんなかんじで読み込んで
var cli = HttpRequestUtils.getClient('getかpost','送信先あどれす');

こんなかんじでくらいあんとを生成して
cli.callbacks['200'] = function(res)
{
 /*
 受け取ったでーたの処理
 res.txt でresponseTextが,res.xml でresponseXMLがげっとできて,
 HttpRequestUtils.parseJson(res.txt) ってするとJSONでーたもぱーすできる・・・よね?(´ω`;【壁
 ↑の'200'はHTTPのすて〜たすこ〜どとおんなじなのでこの場合は正常に取得できたときに呼ばれますです☆
 '404'にするとよく見るNotFoundのときの処理ができるにう d(・x・。【みかん
 でふぉでせっとしてある'unknown'はすて〜たすこ〜どに対する処理がなかったときに呼ばれますです☆
 */
};

こんなかんじででーた受信完了後の処理をせっとしたら
cli.send('HTTP BODY なでーた');

で送信したらあとは待つだけにう?(´ω`。【壁
HTTP BODYで日本語とか記号みたいな変わった文字を使うときは

var arr = {'key1' : value1,'key2' : value2};
cli.send(HttpRequestUtils.encodeString(arr));

こんなかんじで連想配列にで〜たを入れてencodeStringを通すと整形してくれるはずにう d(・x・。【みかん
ちうい点はこのままだとwindow.onloadが他でもせっとされてたときにばってぃんぐしちゃうとこかにゃぁ・・・

ふみゅ・・・
すてきにめも用でもやっぱりこ〜どはいらいと機能ほしいかもにう・・・ (´・ω・`;【壁


こめんと

こめんとする?



 
投稿された内容の著作権はこめんとの投稿者に帰属するっぽいです☆
また,現在 IE6 以下で Sleipnir,Lunascape,Donut じゃないゆ〜ざえ〜じぇんとからの描き込みを制限してますです☆
該当しちゃうかたはてきとうにゆ〜ざえ〜じぇんとを偽装しちゃってくださいです(´ω`;【みかん
さぶこんてんつ
前月 2024年 4月 翌月
  1
 
2
 
3
 
4
 
5
 
6
 
7
 
8
 
9
 
10
 
11
 
12
 
13
 
14
 
15
 
16
 
17
 
18
 
19
 
20
 
21
 
22
 
23
 
24
 
25
 
26
 
27
 
28
 
29
 
30
 
       
             
  • あじ あじ
  • ED ED
  • えでん えでん
  • えれふぃ えれふぃ
  • ぐらぶれ ぐらぶれ
  • etc etc
  • にっき にっき

あわせて読みたい

先頭に戻る
めにう 先頭に戻る