Ajaxで今よみがえる(^^;;-->[クロスブラウザ技術 ]DHTMLサンプル集
古籏一浩さんとのはじめての共著 発売中-->『Ajax実践テクニック』 古籏一浩/高橋 登史朗 (著)秀和システム
配本予約開始-->『入門Ajax 増補改訂版 』 高橋 登史朗 (著)ソフトバンククリエイティブ ; ISBN: 4797336242
【カテゴリー】 ActionScript ( 4 ) AjaSQL ( 9 ) Ajax ( 542 ) Arax ( 1 ) canvas ( 9 ) CSS ( 8 ) DLNA ( 1 ) Dojo ( 16 ) DOM ( 44 ) ES4 ( 3 ) 反重力物質 ( 1 ) ffAdd-on ( 1 ) Flash ( 45 ) Flash Remoting ( 11 ) FTP ( 2 ) GAF ( 9 ) Google Maps ( 107 ) GPS ( 38 ) HTTPヘッダサンプル ( 9 ) IPv6 ( 1 ) 漫画 ( 1 ) Java ( 44 ) JavaScript ( 232 ) jKamo ( 8 ) jQuery ( 69 ) jquery-ref ( 1 ) jsGadget ( 19 ) jslb_ ( 3 ) jslb_ajax ( 9 ) JSON ( 44 ) JSR223 ( 7 ) kjscmd ( 1 ) KNOPPIX ( 1 ) Linux ( 14 ) Mac ( 8 ) Memo ( 3 ) Microformats ( 2 ) Mini AJAX ( 2 ) MochiKit ( 2 ) mootools ( 2 ) Movable Type ( 57 ) MySQL ( 9 ) NewGameWeb ( 2 ) Nucleus ( 8 ) OpenAJAX ( 3 ) OpenDocument ( 1 ) OS ( 5 ) P2P ( 2 ) Perl ( 7 ) PHP ( 37 ) PostGIS ( 1 ) PostgreSQL ( 3 ) prototype.js ( 21 ) ROBOT ( 1 ) RSSリーダー ( 14 ) Ruby on Rails ( 7 ) Spry ( 6 ) SQLite ( 10 ) SQLiteWorker ( 2 ) ssh ( 1 ) SSI ( 2 ) SVG ( 15 ) TRON ( 1 ) Video ( 1 ) VML ( 1 ) Webサービス ( 89 ) widget ( 6 ) Wiki ( 1 ) Win ( 6 ) WSH ( 1 ) X01HT ( 29 ) XML ( 28 ) XOOPS ( 1 ) XQuery ( 2 ) XUL ( 3 ) Yahoo! UI ( 58 ) 日付入力用カレンダー ( 1 ) 『Ajax実践テクニック』 ( 1 ) 『入門 Ajax』 ( 42 ) WinTips ( 2 ) こりゃすごい ( 1 ) チューニング ( 20 ) ダイナミックロード関数 ( 7 ) リファレンス ( 13 ) ライブラリ ( 83 ) レーダー雨量表示 ( 1 ) ハード ( 15 ) ペンギン ( 2 ) ブラウザ ( 56 ) ブログでBBS ( 1 ) アクセスグラフ ( 3 ) カレンダーによる日付入力スクリプト ( 4 ) クロスブラウザ ( 10 ) クロスブラウザ関数 ( 7 ) スマートフォン ( 8 ) セキュリティ ( 87 ) ソフトイーサ ( 1 ) マッシュアップ ( 22 ) 暗号 ( 4 ) 映画 ( 41 ) 河川の水位グラフ ( 3 ) 回線 ( 2 ) 開発ツール ( 16 ) 牛久大仏 ( 8 ) 携帯 ( 112 ) 言語 ( 17 ) 故障 ( 1 ) 洪水警報システム ( 2 ) 今日のひと言 ( 2 ) 仕様 ( 41 ) 雑談 ( 199 ) 書籍 ( 17 ) 親子ウインドウ有無の確認関数 ( 3 ) 新海誠 ( 3 )

【info】有料サポート(ベータ)限定 承り中 /【JSサポート(仮称)】 

【費用】 とりあえず、言い値で承ります。ただし、できる範囲での限定受付です。込み具合等によりお受けできない場合がありますのであらかじめご了承ください。サポートにご納得いただけなければ料金は不要です。 逆に感動したら多くても構いません(^^;;;。

【できること】 たとえば、かも日記で無料配布されているコードのカスタマイズや、あるいは、JavaScript/Ajax全般+Webサーバーとの連携などのアドバイス&サンプル作成等 。A:jQchartなどでWeb用グラフ設置(エクセル→CSVやデータベースからWebグラフ生成)などのアドバイスやカスタマイズサンプル作成。B:ツリーメニューなどのカスタマイズサンプル。C:Google Mapsのカスタマイズ。etc...

【できないこと】 腕立て伏せ200回

【ライセンス】 私が今まで「かも日記」等で提供してきたコードの大半は、商用利用、改造、自由、連絡不要で、今後もそれらは変わりません。そして、この有料サポートによりカスタマイズコードなどが提供される場合でも、同様に、それらを商用利用しても改造しても自由です。ただし、制限のきついライブラリなどを使う場合は、各ライブラリのライセンスに準拠せざるを得ない場合があります。

【info】いつもいろいろなテストなどをページ内のあちこちでやっているので、重かったり、壊れていたりするf^^;ことも多いですが、何卒、ご了承ください ( _ _ b

【jslb_ このページ内へのリンク】
【jslb_】ライブラリ互換処理
【jslb_】テーブル処理用ライブラリ
【Ajax】暫定版Ajax用ライブラリ

[ jslb_ ]

2006年10月05日

【jslb_】ライブラリ互換処理

Ajax 】 , Dojo 】 , Yahoo! UI 】 , jKamo 】 , jslb_ 】 , prototype.js 】 , ライブラリ ブックマークに追加する ブックマーク-- Buzzurl  / Hatena  / Livedoor track feed


最近、jslbなどいじっていて、ひとつのAjaxライブラリでしか動かないのはつまらないし、いちいちライブラリ移植の手間をかけるのもめんどくさい、と感じることが増えてきたので、互換処理を試してみました。

でも、まともに書き始めると、それぞれのライブラリ毎に特徴もあって、それらをすべて互換できるようにしようとすると、それだけのことで結構大きなライブラリができてしまうこともわかりました(笑)。

で、それは、無駄というか、それをやる気は無いので、とりあえず、あるjsgt_ajaxを使った処理に限定して、いくつかのライブラリを互換させてみるというのを試しました。まぁ、普通に動きますが、並べて動作比較などしてみるといくつか新たな発見があったりして面白いです。

  //=====================================================================
  // ライブラリ互換処理
  // jslb_ajax.jsのsendRequest、prototype.jsのAjax.Request、
  // YUIのConnect.asyncRequest、Dojoのdojo.io.bindを互換させます。
  // 使わないライブラリは、実装現場で最後に
  // case 'ライブラリ名':から;break;までの該当するブロックを削除
  // することで、このソースの軽量化が可能です。
  //
  use : '',//使用するライブラリ名

  //使用するライブラリ名を指定します。
  setUse :function(libName){
    this.use=(libName=='auto')?this._autoUse():((libName)?libName:'');
  },

  //setUseの第一引数が'auto'時に、下記配列順に検査しライブラリを自動指定します。
  _autoUse :function(){
    var lib=['prototype.js','yahoo.js','dojo.js','jslb_ajax.js'];
    var liboj=[window.Prototype,window.YAHOO,window.dojo,window.sendRequest];
    for(var i=0;i<=liboj.length;i++){
      var t=typeof liboj[i];
      if(t=='object'||t=='function'){return this.use=lib[i];};
    };
  },

  //置き換え
  _sendRequest :function(callback,data,method,url,async,sload){
  
    function mkPrams(b){
      var p='';
      for(var i in b){
        p+='&'+encodeURIComponent(i)+'='+encodeURIComponent(b[i]);
      };
      return p
    };
    
    switch(this.use){
    
      case 'prototype.js':
        var op={
          method:method,
          parameters:mkPrams(data),
          onComplete:callback,
          asynchronous:async
        };
        url=(sload)?url+'?'+(new Date()):url;
        return new Ajax.Request(url,op);
        
        ;break;
      
      case 'dojo.js':
        dojo.require("dojo.io.*");
        var postContent=''
        url=(sload)?url+'?'+(new Date()):url;
        if(method.toLowerCase()=='get')url+mkPrams(data)
        else postContent=mkPrams(data);
        dojo.io.bind({
          method:method,
          url:url,
          load: function(type,data){
            callback({responseText:data})
          },
          sync:async,
          postContent:postContent
        });

        ;break;
        
      case 'yahoo.js':
        var postData='';
        url=(sload)?url+'?'+(new Date()):url;
        if(method.toLowerCase()=='get')url+mkPrams(data)
        else postData=mkPrams(data);
        YAHOO.util.Connect.asyncRequest(
          method,url,{success:this.onloaded},postData
        )

        ;break;
        
      case 'jslb_ajax.js':
        sendRequest(callback,data,method,url,async,sload);

        ;break;
        
    }
  }
投稿者 tato : 00:15 | トラックバック (0)

2005年07月03日

【jslb_】テーブル処理用ライブラリ

jslb_ ブックマークに追加する ブックマーク-- Buzzurl  / Hatena  / Livedoor track feed


テーブル処理用ライブラリ です。
【動作ブラウザ】
win mac linux
n7m1e6o7o8 n7m1e5s1 n7m1k3

【使用例】
Allabout /Ajax/動的なテーブル書き換え http://allabout.co.jp/career/javascript/closeup/CU20050630A/index.htm

【最新版】 jslb_writetable.js 
 

//==================================================================== // テーブル処理用ライブラリ jslb_writetable.js // // 最新情報は http://jsgt.org/mt/archives/01/000414.html // //// // テーブルを書き出します // @param tableId 対象テーブルを書き出すDIVのID名 // @param dataAry データ 二次元配列で渡します // @sample writeTable('tdiv',[['名前','data'],['山田','12']]) // function writeTable(tableId,dataAry) { //引数があれば下記を実行 if(!!writeTable.arguments[0]){ removeTable(tableId) ; //テーブル削除 mkTable(tableId,dataAry) ; //テーブル生成 mkGraph(tableId) ; //グラフ生成 } } //// // テーブルをソートして書き出します // @param tableId 対象テーブルを書き出すDIVのID名 // @param dataAry データ // @param sortFunc 数値ソート関数名 昇順sortA|降順sortD // @sample reWriteTable('tdiv',[['名前','data'],['a',8],['b',3]],sortD) // function reWriteTable(tableId,dataAry,sortFunc) { sortwk(dataAry,sortFunc) writeTable(tableId,dataAry) } //// // 対象テーブル削除 // @param tableId 対象テーブルを書き出すDIVのID名 // function removeTable(tableId){ document.getElementById(tableId).innerHTML='' } //// // グラフ追加 // @param tableId 対象テーブルを書き出すDIVのID名 // function mkGraph(tableId) { var i,td,img ; // ローカル変数 var mydoc = document ; // documentオブジェクト var table = mydoc.getElementById(tableId) ; // 対象テーブル var trs = table.getElementsByTagName('TR'); // 対象テーブル下のTR配列 // TRを1行ずつ処理 for( i = 1 ; i < trs.length ; i++) { //グラフ用データを前のセルから取得 forGraphData = trs.item(i).childNodes.item(1).firstChild.nodeValue //TDと画像を生成 td = mydoc.createElement("TD") img = mydoc.createElement("IMG") img.setAttribute('src','./bar1.gif') img.setAttribute('height', 20 ) img.setAttribute('width', forGraphData ) //グラフ用TDと画像を挿入 trs.item(i).insertBefore(td, null).insertBefore(img, null) } } //// // テーブル生成 // @param tableId 対象テーブルを書き出すDIVのID名 // @param dataAry データ // function mkTable(tableId,dataAry) { if(!dataAry)return var table, tbody, tr, td, text, i ,j ; // ローカル変数 var row = dataAry.length ; // テーブルデータ行数 var col = dataAry[0].length ; // テーブルデータ列数 var mydoc = document ; // documentオブジェクト //tableとtbody要素を生成 table = mydoc.createElement("TABLE") tbody = mydoc.createElement("TBODY") //tableへtbody要素を挿入しさらに出力用DIVへ挿入 table.insertBefore(tbody, null) document.getElementById(tableId).insertBefore(table, null) //行の処理 for (i=0; i<row; i++) { tr = mydoc.createElement("TR") tbody.insertBefore(tr, null) //列の処理 for (j=0; j<col; j++) { td = mydoc.createElement("TD") text = mydoc.createTextNode(dataAry[i][j]) tr.insertBefore(td, null) td.insertBefore(text, null) //見出しセル(1列目と1行目)に関するCSS用class名を設定 var className=(typeof ScriptEngine=='function')?'className':'class'; // 1列目 if(j==0)td.setAttribute(className,'col0') // 2列目 (成績) if(j==1)td.setAttribute(className,'col1') // 1行目 if(i==0)td.setAttribute(className,'row0') } } return table } //==================================================================== // 並べ替え // //// // 並べ替え // @param dataAry 並べ替え対象配列 // @param sortFunc 数値ソート関数名 昇順sortA|降順sortD // function sortwk(dataAry,sortFunc) { if(!dataAry)return var head = dataAry[0] ; dataAry.shift() dataAry.sort(sortFunc) dataAry.unshift(head) return dataAry } //数値ソート昇順 function sortA(a,b){ return a[1] - b[1] } //数値ソート降順 function sortD(a,b){ return b[1] - a[1] }
投稿者 tato : 06:21 | トラックバック (0)

2005年06月28日

【Ajax】暫定版Ajax用ライブラリ

Ajax 】 , jslb_ 】 , jslb_ajax 】 , ライブラリ ブックマークに追加する ブックマーク-- Buzzurl  / Hatena  / Livedoor track feed


結構あちこちで修正しながら、
使いまわしている「暫定版Ajax用ライブラリ」の更新情報用エントリーです


2008.03.02 v0.516 sload時のdataの前に&抜け修正(Thanx 上原さん)。515cで忘れていたf^^;内部クオートをすべてシングルにしたv0516cも作成。
  • http://jsgt.org/lib/ajax/051/jslb_ajax0516_c.js.txt(圧縮版 1.91KB)
  • http://jsgt.org/lib/ajax/051/jslb_ajax0516.js.txt(コメントあり10.1KB)
    2007.10.24 v0.515 uriEncodeの&処理を修正(Thanx su-さん) 他コードを少し整理。
    2007.10.04 v0.514 強制ロードの書き方を修正 (少しだけ軽量化^^;)
    2007.10.03 v0.513修正 (Thanx teさん) 
    これにより、open後プロセスハンドルが増加してしまうのを回避できます。 (abortでojが無くなるわけではないので、もし外部コールバックが遅延してもoj.responseTextなどは受け取れます)
    2007.03.31 ライブラリjslb_ajaxをv0.511に引き続きv0.512で、Safari2最新版(419)のUA表記に対処。 。v0.512未満のバージョンでは、Safari2.0.4がブラウザ分岐で弾かれますので差し替えを推奨します。
    2006.11.15 内部クオートをすべてシングルにしたv051をつくりました。
    この結果、 jslb_ajax051_c.jsではvar lib="/*jslb_ajax050 2.652k @see http://........" ;eval(lib);という使い方が可能になりました(Thanx Harukaさん)。
    2006.2.24 軽量なコメント削除版jslb_ajax050_c.jsを作りました。
    9.9kあったv050が2.6kになってます。 
    【動作ブラウザ】
    win mac linux
    n7m1e6o7o8+ n7m1e5s1.24+o8+ n7m1k3.3+o8+
    × ×
    n=Netscape/m=Mozilla/e=IE/o=Opera/s=Safari/k=Konqueror
    *Opera8,9,ではsetRequestHeaderはうまく動作しません。
    【使用例】
    Allabout Sync(同期)とAsync(非同期)
    http://allabout.co.jp/internet/javascript/closeup/CU20050615A/index.htm
    動的なテーブル書き換え
    http://allabout.co.jp/internet/javascript/closeup/CU20050630A/index.htm

    【ライセンス】 Public Domain 著作権無し(きっぱり)。商用利用、改造、自由。連絡不要。(厳密には、日本人ですので、日本の法律に敬意を表しますし、従いますが、趣旨は Public Domain ということになるのかな、と思います。) (参考*2005.10.5に修正BSDライセンスを設定して即日やめ、「著作権表示義務無し。商用利用、改造、自由。連絡不要です。 」とした理由は、 こちら)

    【Documents】
    暫定版Ajax用ライブラリの使い方メモ / リファレンス
    [update 2008.03.02 v0516を追加]
    http://jsgt.org/lib/ajax/ref.htm

    jslb_ajax050_c.jsのロード時間
    (ISDNで、jslb_ajax050_c.js=1.11秒、dojo.js=23.164秒)
    http://jsgt.org/mt/archives/01/000902.html

    【暫定最新版ディレクトリ】
    http://jsgt.org/lib/ajax/051/?C=M&O=D

    (注意:最新版以上のバージョンはテスト中ですので使用には堪えません。)

    【最新版】 jslb_ajax0516.js
    コメント無しの軽量1.91KBバージョンは、jslb_ajax0516_c.js 
    jslb_ajax04は、マイナーブランチとします(0.4代は続きません)。

    注意:v0.38までのバージョンでは、sendRequest()の第二引数に書くdata(送信するデータ)は、urlクエリの「&」や「=」とデータ内のそれらの区別がつきません(v0.50で、区別を付けるdataの渡し方を追加しました)。データに「&」か「=」を含む場合は、とりあえず、ちょっと強引ですが(^^;;;このサンプルのように、sendRequest()時にencodeURIComponent(データ)し、レスポンス時に decodeURIComponent(decodeURIComponent(oj.responseText))と二重にデコード、あるいは、サーバー側で二重デコード(たとえば、PHPなら、urldecode($_GET['xxx']))してみてください。

    //==============================================================================
    //  SYSTEM      :  暫定版クロスブラウザAjax用ライブラリ
    //  PROGRAM     :  XMLHttpRequestによる送受信を行います
    //  FILE NAME   :  jslb_ajaxXXX.js
    //  CALL FROM   :  Ajax クライアント
    //  AUTHER      :  Toshirou Takahashi http://jsgt.org/mt/01/
    //  SUPPORT URL :  http://jsgt.org/mt/archives/01/000409.html
    //  CREATE      :  2005.6.26
    //  UPDATE      :  v0.515 2007.10.24 uriEncodeの&処理を修正他コード整理。
    //  UPDATE      :  v0.514 2007.10.04 強制ロードを修正 わずかに軽量化。
    //  UPDATE      :  v0.513 2007.10.03 callback_onloadの後にabortを追記。
    //  UPDATE      :  v0.512 2007.03.31 Safari2.0.4(419)のUA記述にも対処。
    //  UPDATE      :  v0.511 2006.12.11 Safari2.04(418.9.1)のUA記述に対処。
    //  UPDATE      :  v0.51  2006.11.15 .READMEを外へ移動しsendRequest実行前可視化。
    //  UPDATE      :  v0.51  2006.11.15 内部のクオートをシングルに統一。
    //  UPDATE      :  v0.50  2006.02.17 sendRequest.prototype.READMEを追加。
    //  UPDATE      :  v0.50  2006.02.17 Win e7ネイティブXMLHttpRequest対応 。
    //  UPDATE      :  v0.50  2006.02.17 引数dataにobject,array指定も追加 。
    //  UPDATE      :  v0.39  2005.11.17 引数colbackにobject,array指定も追加。
    //  UPDATE      :  v0.38  2005.10.18 chkAjaBrowser()を追加
    //  UPDATE      :  v0.372 2005.10.14 uriEncodeを修正
    //  UPDATE      :  v0.371 2005.10.7 GETとsload時の?の付け方を修正。
    //  UPDATE      :  v0.37 2005.10.5.1 修正BSDライセンスやめました。
    //                       著作権表示義務無し。商用利用、改造、自由。連絡不要です。
    //  UPDATE      :  v0.37 2005.10.5 リクエストヘッダenctypeのセット方法等を変更
    //                       setEncHeader、uriEncodeを追加
    //                       @see http://jsgt.org/ajax/ref/test/enctype/test1.htm
    //                       修正BSDライセンスにしました
    //  UPDATE      :  v0.36 2005.7.20 (oj.setRequestHeader)がwinieでunknown
    //                  を返すことが判明し修正(unknownなのに、動作はします)
    //  UPDATE      :  v0.35 2005.7.19 POSTのContent-Type設定をOpera8.01対応
    //  UPDATE      :  v0.34 2005.7.16 sendRequest()にuser,password引数を追加
    //  UPDATE      :  v0.33 2005.7.3  Query Component(GET)の&と=以外を
    //                                encodeURIComponentで完全エスケープ。
    //  TEST-URL    :  ヘッダ http://jsgt.org/ajax/ref/lib/test_head.htm
    //  TEST-URL    :  認証   http://jsgt.org/mt/archives/01/000428.html
    //  TEST-URL    :  非同期 
    //        http://allabout.co.jp/career/javascript/closeup/CU20050615A/index.htm
    //  TEST-URL    :  SQL     http://jsgt.org/mt/archives/01/000392.html
    //------------------------------------------------------------------------------
    // 最新情報   : http://jsgt.org/mt/archives/01/000409.html 
    // 著作権表示義務無し。商用利用、改造、自由。連絡不要。
    //
    //
    
    
    	////
    	// 動作可能なブラウザ判定
    	//
    	// @sample        if(chkAjaBrowser()){ location.href='nonajax.htm' }
    	// @sample        oj = new chkAjaBrowser();if(oj.bw.safari){ /* Safari code */ }
    	// @return        ライブラリが動作可能なブラウザだけtrue  true|false
    	//
    	//  Enable list (v038現在)
    	//   WinIE 5.5+ 
    	//   Konqueror 3.3+
    	//   AppleWebKit系(Safari,OmniWeb,Shiira) 124+ 
    	//   Mozilla系(Firefox,Netscape,Galeon,Epiphany,K-Meleon,Sylera) 20011128+ 
    	//   Opera 8+ 
    	//
    	
    	function chkAjaBrowser()
    	{
    		var a,ua = navigator.userAgent;
    		this.bw= { 
    		  safari    : ((a=ua.split('AppleWebKit/')[1])?a.split('(')[0].split('.')[0]:0)>=124 ,
    		  konqueror : ((a=ua.split('Konqueror/')[1])?a.split(';')[0]:0)>=3.3 ,
    		  mozes     : ((a=ua.split('Gecko/')[1])?a.split(' ')[0]:0) >= 20011128 ,
    		  opera     : (!!window.opera) && ((typeof XMLHttpRequest)=='function') ,
    		  msie      : (!!window.ActiveXObject)?(!!createHttpRequest()):false 
    		}
    		return (this.bw.safari||this.bw.konqueror||this.bw.mozes||this.bw.opera||this.bw.msie)
    	}
    
    	////
    	// XMLHttpRequestオブジェクト生成
    	//
    	// @sample        oj = createHttpRequest()
    	// @return        XMLHttpRequestオブジェクト(インスタンス)
    	//
    	function createHttpRequest()
    	{
    		if(window.XMLHttpRequest){
    			 //Win Mac Linux m1,f1,o8 Mac s1 Linux k3 & Win e7用
    			return new XMLHttpRequest() ;
    		} else if(window.ActiveXObject){
    			 //Win e4,e5,e6用
    			try {
    				return new ActiveXObject('Msxml2.XMLHTTP') ;
    			} catch (e) {
    				try {
    					return new ActiveXObject('Microsoft.XMLHTTP') ;
    				} catch (e2) {
    					return null ;
    	 			}
    	 		}
    		} else  {
    			return null ;
    		}
    	}
    	
    	////
    	// 送受信関数
    	//
    	// @sample         sendRequest(onloaded,'&prog=1','POST','./about2.php',true,true)
    	// @sample         sendRequest(onloaded,{name:taro,id:123,sel:1},','POST','./about3.php',true,true)
    	// @sample         sendRequest({onload:loaded,onbeforsetheader:sethead},'',','POST','./about3.php',true,true)
    	// @param {string} callback 受信時に起動する関数名 
    	// @param {object} callback 受信時に起動する関数名とヘッダ指定関数名{onload:関数名,onbeforsetheader:関数名} 
    	// @param {array}  callback 受信時に起動する関数名とヘッダ指定 ary['onload']=関数名;ary['onbeforsetheader']=関数名 
    	// @see                    http://jsgt.org/ajax/ref/head_test/header/Range/004/sample.htm
    	// @param {string} data	   送信するデータ stringの場合(&名前1=値1&名前2=値2...)
    	// @param {object} data	   送信するデータ objectの場合{名前1:値1,名前2:値2,...}
    	// @param {array}  data	   送信するデータ arrayの場合は連想配列 ary['名前1']=値1;ary['名前2']=値2
    	// @param {string}method   'POST' or 'GET'
    	// @param {string}url      リクエストするファイルのURL
    	// @param {string}async	   非同期ならtrue 同期ならfalse
    	// @param {string}sload	   スーパーロード trueで強制、省略またはfalseでデフォルト
    	// @param {string}user	   認証ページ用ユーザー名
    	// @param {string}password 認証ページ用パスワード
    	//
    	sendRequest.README	 = {
    		url		: 'http://jsgt.org/ajax/ref/lib/ref.htm',
    		name	: 'sendRequest', 
    		version	: 0.514, 
    		license	: 'Public Domain',
    		author	: 'Toshiro Takahashi http://jsgt.org/mt/01/',memo:''
    	};
    	function sendRequest(callback,data,method,url,async,sload,user,password)
    	{
    		var GET=method.toUpperCase()=='GET',
    		oj = createHttpRequest();
    		if( oj == null ) return null;
    		
    		//強制ロードの設定
    		if((sload)?sload:false)url +=((url.indexOf('?')==-1)?'?':'&')+'t='+(new Date()).getTime();
    
    		//ブラウザ判定
    		var bwoj = new chkAjaBrowser(),
    		o  = bwoj.bw.opera,
    		s  = bwoj.bw.safari,
    		k = bwoj.bw.konqueror,
    		m  = bwoj.bw.mozes ;
    				
    		//callbackを分解
    		//{onload:xxxx,onbeforsetheader:xxx}
    		if(typeof callback=='object'){
    			var callback_onload = callback.onload;
    			var callback_onbeforsetheader = callback.onbeforsetheader;
    		} else {
    			var callback_onload = callback;
    			var callback_onbeforsetheader = null;
    		}
    
    		//受信処理
    		//operaはonreadystatechangeに多重レスバグがあるのでonloadが安全
    		//Moz,FireFoxはoj.readyState==3でも受信するので通常はonloadが安全
    		//Win ieではonloadは動作しない
    		//Konquerorはonloadが不安定
    		//参考http://jsgt.org/ajax/ref/test/response/responsetext/try1.php
    		if(o || s || m){
    			oj.onload = function () { callback_onload(oj);oj.abort(); }
    		} else {
    		
    			oj.onreadystatechange =function () 
    			{
    				if ( oj.readyState == 4 ){
    					//alert(oj.status+'--'+oj.getAllResponseHeaders());
    					callback_onload(oj);oj.abort();
    				}
    			}
    		}
    
    		//URLエンコード
    		data = uriEncode(data,url);
    		if(GET) {
    			url += ((url.indexOf('?')==-1)?'?':'')+data;
    		}
    
    		//open メソッド
    		oj.open(method,url,async,user,password);
    		
    		
    		//リクエストヘッダカスタマイズ用コールバック
    		//使う場合は、呼び出しHTML側のwindow直下へグローバルな関数setHeadersを
    		//記述し、その中でsetRequestHeader()をセットしてください
    		//@sample function setHeaders(oj){oj.setRequestHeader('Content-Type',contentTypeUrlenc)}
    		//
    		if(!!callback_onbeforsetheader)callback_onbeforsetheader(oj);
    
    		//デフォルトヘッダapplication/x-www-form-urlencodedセット
    		setEncHeader(oj);
    		
    		
    		//デバック
    		//alert('////jslb_ajaxxx.js//// \n data:'+data+' \n method:'+method+' \n url:'+url+' \n async:'+async);
    		
    		//send メソッド
    		oj.send(data);
    
    
    		//URIエンコードヘッダセット
    		function setEncHeader(oj){
    	
    			//ヘッダapplication/x-www-form-urlencodedセット
    			// @see  http://www.asahi-net.or.jp/~sd5a-ucd/rec-html401j/interact/forms.html#h-17.13.3
    			// @see  #h-17.3
    			//   ( enctype のデフォルト値は 'application/x-www-form-urlencoded')
    			//   h-17.3により、POST/GET問わず設定
    			//   POSTで'multipart/form-data'を指定する必要がある場合はカスタマイズしてください。
    			//
    			//  このメソッドがWin Opera8.0でエラーになったので分岐(8.01はOK)
    			if(!o||typeof oj.setRequestHeader == 'function'){
    				oj.setRequestHeader('Content-Type','application/x-www-form-urlencoded; charset=UTF-8');
    			}
    			return oj
    		}
    
    		//URLエンコード
    		//引数dataは、stringかobjectで渡せます
    		function uriEncode(data,url){
    			var d = [];
    			if(typeof data=='object'){
    				for(var i in data)p(i,data[i]);
    			} else if(typeof data=='string'){
    				if(data=='')return '';
    				//&と=で一旦分解しencode
    				if(data.charAt(0)=='&')data=data.substring(1,data.length)
    				var datas = data.split('&');
    				for(var i=0;i<datas.length;i++)
    				{
    					var dataq = datas[i].split('=');
    					p(dataq[0],dataq[1]);
    				}
    			} 
    			function p(k,v){d.push( encodeURIComponent(k) + "=" + encodeURIComponent(v))};
    			return d.join("&");
    		}
    
    		return oj
    	}
    


      高橋 ( 2005年10月05日 01:26 )

      application/x-www-form-urlencoded
      の入れ方について確認中、037で修正予定です。
      http://jsgt.org/ajax/ref/test/enctype/test1.htm


      高橋 ( 2005年11月19日 10:53 )

      HTTPのリクエストヘッダを、好きな時に、setRequestHeaders()で、open()とsend()の間に挿入するための簡単な仕掛けを、v039で入れたいと思っています。

      高橋 ( 2005年12月08日 16:57 )

      ukky さんありがとうございます。
      でも、その症状が確認できませんでした、、、。もし、お差支えなければ、全体はどんなコードかわかるとありがたいのですが、、、。

      入門Ajax ( 2005年12月12日 23:44 )

      OS windowsXP
      MSIE6.0
      jslb_ajax038.js

      MSIEではエラーが表示され動きません。
      行156
      構文が無効です。

      高橋 ( 2005年12月13日 10:18 )

      行156あたりはoj.send(data);かfunction setEncHeader(oj)の付近だと思いますが、
      もし、わかればありがたいのですけれど、
      sendRequest(callback,data,method,url,async,sload,user,password)
      のdataとmethodは、どう書いていたかわかりますか?

      たら ( 2005年12月25日 17:24 )

      >入門Ajaxさん
      私の場合65行目のcatchの部分で構文エラーが出ました(IE6.0)。
      しかしそれはiframe内のソースでライブラリを外部インクルードした場合、というかなり特殊なケースでのみ発生しました。
      iframeは使わざるを得ないので、外部JavascriptではなくHTMLに直接ライブラリをまんま記述したところエラーは出なくなりました。
      IEのバグでしょうか。

      tbo ( 2006年01月31日 11:34 )

      入門Ajaxの58ページにmcharset属性の指定が必須とありますが、mcharsetはどこに指定したら良いのでしょうか。ネット内を探しましたがわかりませんでした。ご指導いただければ幸いです。
      ※もしかして、javascriptのcharsetの事でしょうか?

      高橋 ( 2006年01月31日 23:47 )

      ああ、すみません。それは、charsetの間違いですね。ありがとうございます。

      color99 ( 2006年04月19日 00:39 )

      javascriptからhttpで送るデータに半角の&又は=が含まれているとそれを含む以降の文字が送れないみたいです。
      これはこのライブラリの現在の仕様の様に思いますが、送れる様には出来ないでしょうか?

      高橋 ( 2006年04月19日 15:20 )

      jslb_ajax050.js
      を使うと、データをオブジェクトで{名前1:値1,名前2:値2,...}のようにして送ることができます。

      http://jsgt.org/ajax/ref/lib/ref.htm


      sendRequest(onloaded,{data1:123 , data2: "aaaa", data3:"test" },'GET','./test.txt')

      color99 ( 2006年04月19日 23:34 )

      例えば、http://www.google.co.jp/search?q=google&start=0&hl=ja&lr=lang_ja&ie=utf-8&oe=utf-8&client=firefox&rls=org.mozilla:ja:officialとかいうURLを送りたい場合などに、わざわざ分解せずに送りたいのですが。

      高橋 ( 2006年04月20日 08:41 )

      これはどうですか?
      http://jsgt.org/ajax/newmon/samples/chapter05/05-01-01/sample2.htm

      color99 ( 2006年04月21日 00:15 )

      ありがとうございます。
      ご紹介いただいたのは、本には書かれていないサンプルですね。
      なるほど2重にエンコードとデコードすればいいのですか。
      参考にして検討してみます。

      高橋 ( 2006年04月30日 10:21 )

      mobtさん、ご報告有り難うございます。
      こちらでも、試しに、明示的に050.jpを指定してみましたが、一応動いてるみたいです。
      http://jsgt.org/ajax/newmon/samples/chapter04/04-01-01/sample_50.htm
      そちらでは、どうでしょうか?ご確認いただけますか?

      ijta ( 2006年07月06日 18:41 )

      ダウンロードした入門Ajaxのサンプルソースですが、
      chapter07\07-01-02\sample.htm のXML読み込みが
      IE6.0(SP2)/WinXP Proで動作しません。IEのデバッグ表示は有効にしておりますが、特にエラー等は表示されていません。 item.length に 0が返ってしまいます。
      ちなみに、FireFox1.5.04では正常に動作します(item.lengthは2が入ります)

      高橋 ( 2006年07月06日 21:56 )

      ijtaさんこんばんは。
      http://jsgt.org/ajax/newmon/samples/chapter07/07-01-02/sample.htm

      これは、動作しますか?

      ijta ( 2006年07月07日 16:49 )

      高橋さん:
      はい、こちらは同じブラウザ問題なく動作します。

      高橋 ( 2006年07月11日 15:19 )

      もしかして、Webサーバー側の無い、ローカルで試している?ということは無いですか?

      MASA ( 2006年07月28日 22:14 )

      OS windowsXP
      MSIE6.0
      jslb_ajax050.js

      上記環境では行23とやらでエラーが出て動かないで
      すよ(オブジェクトでサポートされていないプロパティま
      たはメソッドです)。
      本当に動作確認されていらっしゃるのですか?

      高橋 ( 2006年07月29日 03:37 )

      jslb_ajax050.jsが行23でエラーを出すことは無いと思います。そのあたりはコメントですから。そのエラーを検証できるURLを教えていただけると、何かわかるかもしれません。

      修行中 ( 2006年10月24日 13:48 )

      sendRequest()の引数、dataについて質問させてください。

      指定方法にObject、配列、文字列とあるのは理解できるのですが、左辺に同じ名前で複数個セットして、サーバーでは配列の状態で値を受け取りたいと考えているのですが、記述方法に悩んでいます。右辺には"="や"&"が入ってしまうため、文字列で送ることができません。

      どうかご指南お願いいたします。

      修行中 ( 2006年10月24日 16:00 )

      書き忘れました。
      dataの部分は動的に生成したいと思っています。

      高橋 ( 2006年10月25日 10:08 )

      左辺と右辺の具体例をいただけますか?

      ちなみに、「サーバーでは配列の状態で値を受け取りたい」との件ですが、
      sendRequestでは、data部分を配列、oj、文字列いずれで書いても送信はHTTPプロトコルのGET/POSTで送られますから、サーバー側では&name=valueを分解してから受け取る形になります。

      もしかして、このvalueを['a','b','c']や{"a":123}のようにしたいということでしょうか?

      Haruka ( 2006年11月14日 04:08 )

      jslb_ajax050_c.jsを使用させていただいています。

      コード中の文字列の表記にダブルクォートとシングルクォートの両方の表記を用いていらっしゃいますが、可能であればシングルクォートだけに統一していただけるとありがたいです。

      include = "/*jslb_ajax050 2.652k.....;return oj}";

      としておき、

      eval(include);

      document.write(include);

      の、ような使いかたができますので。
      ご検討いただければ幸いです。

      高橋 ( 2006年11月15日 17:12 )

      Haruka さん。ナイスアイディアですね。さっそく作らせていただきました。

      Haruka ( 2006年11月16日 02:36 )

      早速の対応ありがとうございます。つまらない案を採用していただき感動してます!!

      miz ( 2006年11月24日 17:40 )

      有用なスクリプトを有り難う御座います。重宝して使わせて頂いています。
      ずっとversion4を利用していたのですが、最近opera9を使い始めてRequestHeaderを指定しないとうまくデータを受け取れないことに気づいて、自力で、operaのversionチェックを追加しておりました。
      たまたま、こちらへ再度見に来て、operaのversion up対応されていることを知りました。
      で、opera判定してから
      if(typeof oj.setRequestHeader) == 'function')
      の分岐をしていて、こんな方法も有ったかと感心したのですが、
      それじゃあ、ここはブラウザ判定しないでも、この判定だけで十分かなとも思いました。
      僭越かとも思いましたが、意見を述べさせて頂きました。

      高橋 ( 2006年11月25日 01:00 )

      そうです。opera分岐は、他に1箇所で使っているだけなので、あんまり役に立っていません(笑)。作ったときは、たぶん、Operaは、今後もっと分岐して面倒を見ないといけないはずだ、と読んでいたのですが、今も案外まともに高速で動いていますね(^^;

      oku ( 2006年12月11日 00:51 )

      はじめまして、okuと申します。
      Safariのバージョンを2.0.4に上げたとたん、Browser分岐が
      Ajax非動作ブラウザとして認識されるようになりました。
      『入門 Ajax』のサポートページも閲覧出来ない状態にあります。
      ご報告まで。

      高橋 ( 2006年12月12日 01:47 )

      oku さんありがとうございます。対処したv0.511をリリースしました。

      新しいSafariのWebkitバージョン番号が数値の文字列ではなく、コンマを複数つなぐ形式になっていたのが原因でした。これが仕様なのかもしれません。うーん、予想失敗。最初から文字列として扱っていればよかったです。

      puyo ( 2007年02月07日 22:22 )

      ブラウザのキャッシュ対策でhttp://blog.dtpwiki.jp/dtp/2007/02/ieajaxie_aa84.html
      という記事がありました。

      v0.511現在だと「ユニークIDを付加する方法」動作のようですが、「If-Modified-Sinceヘッダを用いる方法」をデフォルトにできないでしょうか?

      高橋 ( 2007年02月08日 02:10 )

      puyoさん今晩は。getのユニークIDで強制ロードを行う方法は、確かに強引なワザですので実装する際には結構悩みました。

      確かに、setHeadでやる方が正しいと思います。

      ただ、当時、いろいろなブラウザを試験してみて「絶対確実に強制ロードできる」と言う点で、ヘッダの指定よりも優れていたので選択し、一応、true|falseでユーザーが選べるようにしてはあります。

      でも、最近は調べていませんので、この機会にもう一度テストして、もし行けそうなら再度試してみたいと思います。

      まだ、チェックしていませんが、リクエストヘッダをセットするなら自力でもたとえば、次のような書き方があります。

      sendRequest({
      onload : on_loaded1,
      onbeforsetheader : function(oj){
      oj.setRequestHeader('Cache-Control','no-cache');
      oj.setRequestHeader('Pragma','no-cache');
      oj.setRequestHeader ('Expires', 0);
      }
      },'',GET,URL,true,false);

      ちょっと試してみました。。。IEで確実とはいえない気もしますが、でも、デフォルトでどうするかなども、もう少し考えてみる必要があるかもしれません。。。

      高橋 ( 2007年02月08日 02:12 )

      試したURLです。511で試しました。
      http://jsgt.org/lib/ajax/051/jslb_ajax0511_test.htm

      puyo ( 2007年02月09日 12:51 )

      ご返答ありがとうございます。

      手元に"http://ドメイン/?t=〜" が表示できないHTTPデーモンがあったので、あまり考えずにヘッダの方がいいかなと考えていました。

      ライブラリとしては「確実な動作」も重要ですので、こちらでも動作検証しつつ setRequestHeader という方向で使わせて頂きます。

      oku ( 2007年03月16日 03:42 )

      お久しぶりです、okuと申します。
      MacOSを10.4.9、Safariのバージョンを2.0.4(419.3)に上げたとたん、Browser分岐が
      Ajax非動作ブラウザとして認識されるようになりました。
      『入門 Ajax』のサポートページも閲覧出来ない状態にあります。
      おそらく前回と同様な問題が起きているのではないかな?と思いました。

      高橋 ( 2007年03月31日 14:11 )

      oku さんいつもありがとうございます。遅くなってすみませんでした。512を作りました。

      SafariのUA表記ルールが見当たらなかったので、相手の出方次第、ということで、つらいところですが、今度こそしばらく大丈夫かも??

      Zen ( 2007年04月23日 04:56 )

      http://jsgt.org/ajax2/ を昨日購入したのですが、すみません、これ chapter01 から chapter03 で紹介されているソースコードはどこに置いてあるんですかね?

      もしかして公開されてません? タイプしてコピーするのは面倒なので、本の "サポート" としてあると助かります。

      高橋 ( 2007年04月24日 09:49 )

      Zenさんありがとうございます
      http://jsgt.org/ajax2/
      の左側にあるリンク「ダウンロード[サンプルコード一式(PHP,Perl,SQLiteDB等含む)] 」をクリックしてみてください。

      一応パスワードが必要ですので、お手数ですが、本書の「はじめに」か「奥付」を見てください。

      高橋 ( 2007年04月24日 13:27 )

      あ、勘違いしました。すみません「chapter01 から chapter03」ですか。そこは、ほとんど記事や解説ですので特にダウンロードサンプルとしてはまとめていないんです。ごめんなさい。

      Zen ( 2007年04月24日 13:41 )

      コメントありがとうございます。本自体は楽しくてもう既に読み終えてしまいました。

      > ... の左側にあるリンク「ダウンロード[サンプルコード一式(PHP,Perl,SQLiteDB等含む)] 」 ...

      あっ、それは知ってました。 私が知りたかったのは、 ajax2\newmon\samples 以下には chapter04-12 しかなくて、 chapter01、 chapter02、 そして chapter03 のソースコードは含まれていなかった為、それらのコードは公開されているのか、といったことでした。

      私が探し足りていないだけでしょうか、それとも単にソースコードが公開されていないのでしょうか?

      te ( 2007年10月03日 12:12 )

      タスクマネージャの「プロセス」「ハンドル(表示メニューから列選択)」がsendRequestを呼び出す毎に増えてゆく現象で困っています。OSは2000,XPでも同じです。jslb_ajax0512.jsを使用しています。oj.open(method,...直後に増えていることを確認しています。
      最初はハンドルは数百ですが、1回の呼び出しで数個づつ増えてそのうち数万になり、リソース不足でハングアップします。同様のロジックででprototype.jsのAjAXを呼び出した場合はハンドル増加は認められません。
      回避方法等教えてください。

      高橋 ( 2007年10月03日 20:22 )

      テストまでしていただきありがとうございます。
      とりあえず、下記のようにoj.abort();を2か所追記していただけますか?これで直ると思いますが、いかがでしょうか? 後日、v0513を作ります。

      if(opera || safari || mozes){
      oj.onload = function () { callback_onload(oj);oj.abort(); }
      } else {

      oj.onreadystatechange =function ()
      {
      if ( oj.readyState == 4 ){
      //alert(oj.status+'--'+oj.getAllResponseHeaders());
      callback_onload(oj);oj.abort();
      }
      }
      }

      te ( 2007年10月04日 00:30 )

      こんなに早く回答いただけると思っていませんでした。
      ハンドルの増加は直りました。使わせていただきます。
      ありがとうございました。

      su- ( 2007年10月24日 12:04 )

      jslb_ajax0514_c.jsを使用させていただいてます。

      sendRequest(onloaded,{data1:123 , data2:"aaa", data3:"test" },'POST','./test.txt')}

      のようにコーディングしているのですが、data1の値が送られません。
      dataの部分を '&data1=123&data2=・・・'としても同様でした。

      お忙しいところ大変恐縮ですが、コード記述ミスなど、ご教授頂きたいと思っております。

      高橋 ( 2007年10月24日 12:43 )

      こんにちは。
      クオートとダブルクオートが混在していますが、そこはそのままですか?こちらでは、そこを修正して試してみましたが特に問題は無いようでした。

      どうでしょうか?

      su- ( 2007年10月24日 14:13 )

      とっても早くお返事頂きまして、ありがとうございます!

      混在している件は大丈夫です。
      ダブルクオートはなしです。まぎらわしくてすみません。

      methodに 'POST' を指定しているのでsend()でデータを送っていると思うのですが、
      そのデータの先頭に '&' が付いているような気がします。
      間違っていたら申し訳ありません。

      それとも、受信側に問題があるのでしょうか?
      サーバー側はASPで組んでいます。

      高橋 ( 2007年10月24日 16:07 )

      すみません。エンコード処理の部分で、POSTに無駄な&が付いていますね。こちらのサーバーは許してくれているのですが、甘いということですねf^^;;。ちょっと修正してみました。
      http://jsgt.org/lib/ajax/051/jslb_ajax0515b1.js
      テスト
      http://jsgt.org/lib/ajax/051/test/jslb_ajax0515b1.htm

      お手数おかけしますが、いかがでしょうか?

      su- ( 2007年10月24日 17:00 )

      修正していただいたライブラリで上手くいきました!

      teさんもおっしゃっているように、
      こんなに早く回答いただけるなんて、本当に助かります。
      お忙しい中、いろいろとありがとうございました。

      ASK ( 2007年12月15日 00:41 )

      このライブラリをShift_JIS環境のPHPと一緒に使いたいのですが、変更する点はの部分のcharsetのみでよいのでしょうか?
      PHP側のmb_http_output関数の引数はどうすればいいのでしょうか?

      高橋 ( 2007年12月15日 01:30 )

      ページのcharsetがShift_JISなら、mb_http_output("SJIS"); で良いと思います。

      さらに、ライブラリ自体もShift_JISで保存した上で、<script src = "./jslb_ajax.js" charset= "Shift_JIS"></script>で読み込むと安全かなと。

      あと、コードの中のoj.setRequestHeader('Content-Type','application/x-www-form-urlencoded; charset=UTF-8')は、そのままで良いと思います。

      itn ( 2008年01月20日 16:49 )

      使わせていただいておりますが、OP、FF、IE6では正常に動作していますが、なぜかIE7だと

      ライン:183
      文字:3
      アクセスが拒否されました。

      とエラーが出てしまいます。

      高橋 ( 2008年01月20日 18:50 )

      itnさんこんにちは。今IE7 v7.0.6 でアクセスしてみていますが、問題を見つけられませんでした。

      そのエラーの出ているサイトは見れますか?

      itn ( 2008年01月20日 20:11 )

      ローカルでサンプルを動かしてみた時にこの症状になりました。
      開くことは出来ますがステータスバーに警告アイコンが出てjavascriptが一切停止してしまいます。

      高橋 ( 2008年01月20日 22:33 )

      Webサーバー(httpd)は動いていますか?AjaxのXMLHttpRequestは、原則HTTP通信なのでローカルではWebサーバーがないと動かないのが正常?だったりもします。

      itn ( 2008年01月21日 15:26 )

      そうなのですか。
      簡単に試せないので不便に感じます。
      ありがとうございました。

      らる ( 2008年02月05日 12:04 )

      v0.515でsendRequest(onRet, '&a=1&b=2&c&3', 'GET', 'test.html', true, true);と指定した場合、&a=1の値(最初の変数)がtest.htmlに送られていないようですが...(二番目の変数以降(&b=2&c&3)はうまくGETできました)

      高橋 ( 2008年02月05日 15:08 )

      らるさんこんにちは。
      下記でのテストでは送られているようなのですが、何か違いがありますか?

      http://jsgt.org/lib/ajax/051/test/jslb_ajax0515.htm
      http://jsgt.org/lib/ajax/051/test/jslb_ajax0515_c.htm

      上原 ( 2008年03月02日 13:15 )

      uriEncode()関数内で、dataの先頭の"&"を取り外した後、returnするときに結合していないようです。
      (先頭以外の"&"は大丈夫)

      使用しているのは v0.515 になります。

      高橋 ( 2008年03月03日 00:18 )

      上原さんありがとうございます。GETでの強制ロード時に、最初の&が欠落してtと結合してしまいますね。うう。

      v0.5.6をリリースしました。

      高橋 ( 2008年03月03日 00:20 )

      念のためにテスト
      http://jsgt.org/lib/ajax/051/test/jslb_ajax0516.htm


      【コメント】(←clickで入力欄open)
    投稿者 tato : 17:45 | トラックバック (0)
  • 【info】有料サポート(ベータ)限定 承り中 /【JSサポート(仮称)】 

    【費用】 とりあえず、言い値で承ります。ただし、できる範囲での限定受付です。込み具合等によりお受けできない場合がありますのであらかじめご了承ください。サポートにご納得いただけなければ料金は不要です。 逆に感動したら多くても構いません(^^;;;。

    【できること】 たとえば、かも日記で無料配布されているコードのカスタマイズや、あるいは、JavaScript/Ajax全般+Webサーバーとの連携などのアドバイス&サンプル作成等 。A:jQchartなどでWeb用グラフ設置(エクセル→CSVやデータベースからWebグラフ生成)などのアドバイスやカスタマイズサンプル作成。B:ツリーメニューなどのカスタマイズサンプル。C:Google Mapsのカスタマイズ。etc...

    【できないこと】 腕立て伏せ200回

    【ライセンス】 私が今まで「かも日記」等で提供してきたコードの大半は、商用利用、改造、自由、連絡不要で、今後もそれらは変わりません。そして、この有料サポートによりカスタマイズコードなどが提供される場合でも、同様に、それらを商用利用しても改造しても自由です。ただし、制限のきついライブラリなどを使う場合は、各ライブラリのライセンスに準拠せざるを得ない場合があります。

    【jsgt.org関連 最新アクセス 10件 htmlファイルのみ 】(30秒更新/Max接続30分 リピートなし)