Ajaxで今よみがえる(^^;;-->[クロスブラウザ技術 ]DHTMLサンプル集
-- リスト --
【カテゴリー】 ActionScript ( 6 ) AIR ( 4 ) AjaSQL ( 10 ) Ajax ( 674 ) Arax ( 1 ) canvas ( 15 ) CSS ( 24 ) ( 9 ) DLNA ( 1 ) Dojo ( 25 ) DOM ( 51 ) ES4 ( 4 ) Ext JS ( 5 ) 反重力物質 ( 1 ) ffAdd-on ( 1 ) Flash ( 48 ) Flash Remoting ( 11 ) FTP ( 2 ) GAF ( 9 ) Google Maps ( 124 ) Google ガジェット ( 1 ) GPS ( 44 ) HTML ( 11 ) HTTPヘッダサンプル ( 10 ) IME ( 2 ) Internet ( 2 ) iPhone ( 49 ) IPv6 ( 1 ) 漫画 ( 4 ) Java ( 49 ) JavaScript ( 342 ) jKamo ( 8 ) jQchart ( 4 ) jQuery ( 207 ) jquery-ref ( 1 ) jsGadget ( 19 ) jslb_ ( 3 ) jslb_ajax ( 9 ) JSON ( 49 ) JSR223 ( 7 ) kjscmd ( 1 ) KNOPPIX ( 1 ) Linux ( 18 ) Mac ( 9 ) Memo ( 3 ) Microformats ( 2 ) Mini AJAX ( 2 ) MochiKit ( 2 ) mootools ( 9 ) Movable Type ( 58 ) MySQL ( 10 ) NewGameWeb ( 2 ) Nucleus ( 8 ) OpenAJAX ( 3 ) OpenDocument ( 1 ) OS ( 10 ) P2P ( 2 ) Perl ( 8 ) PHP ( 38 ) PostGIS ( 1 ) PostgreSQL ( 4 ) prototype.js ( 28 ) ROBOT ( 1 ) RSSリーダー ( 15 ) Ruby on Rails ( 7 ) SPDY ( 1 ) Spry ( 6 ) SQLite ( 17 ) SQLiteWorker ( 2 ) ssh ( 1 ) SSI ( 2 ) SVG ( 23 ) TRON ( 1 ) Ubiquity ( 7 ) Video ( 1 ) VML ( 1 ) Web Slice ( 1 ) Web Sockets ( 19 ) Webサービス ( 106 ) widget ( 6 ) Wii ( 1 ) Wiki ( 1 ) Win ( 6 ) WSH ( 1 ) X01HT ( 30 ) XML ( 32 ) XOOPS ( 1 ) XQuery ( 2 ) XUL ( 4 ) Yahoo! UI ( 74 ) 日付入力用カレンダー ( 1 ) 『Ajax実践テクニック』 ( 1 ) 『入門 Ajax』 ( 42 ) WinTips ( 2 ) こりゃすごい ( 7 ) チューニング ( 30 ) ダイナミックロード関数 ( 7 ) リファレンス ( 20 ) ライブラリ ( 210 ) レーダー雨量表示 ( 1 ) ハード ( 35 ) ペンギン ( 2 ) ブラウザ ( 107 ) ブログでBBS ( 1 ) アクセスグラフ ( 3 ) イベント ( 2 ) カレンダーによる日付入力スクリプト ( 4 ) クロスブラウザ ( 14 ) クロスブラウザ関数 ( 8 ) スマートフォン ( 8 ) セキュリティ ( 155 ) ソフトイーサ ( 1 ) マッシュアップ ( 23 ) 暗号 ( 4 ) 映画 ( 57 ) 河川の水位グラフ ( 3 ) 回線 ( 2 ) 開発ツール ( 38 ) 牛久大仏 ( 19 ) 携帯 ( 150 ) 言語 ( 19 ) 故障 ( 9 ) 高橋家の謎 ( 3 ) 広告とか ( 1 ) 洪水警報システム ( 2 ) 今日のひと言 ( 10 ) 仕様 ( 112 ) 雑談 ( 353 ) 実装 ( 2 ) 書籍 ( 20 ) 親子ウインドウ有無の確認関数 ( 3 ) 新海誠 ( 3 )
Web Sockets Domo

* サーバー側は、小松氏のこれをbloga.jp:80へ置いてあります。
* クライアント側はWS処理をjQueryプラグイン化してみました。これです。
* ちなみに、このDemoサンプルは、下記5行でローカルでも別ドメインでもどこにでも設置出来ます。
<script src="http://bloga.jp/ws/jq/js/jquery-1.3.2.min.js" type="text/javascript"></script> <script src="http://bloga.jp/ws/jq/js/jquery.ws-0.3-noenc-pre.js" type="text/javascript" charset="utf-8"></script> <script src="http://bloga.jp/ws/jq/conn/wschatdemo0.3.js" type="text/javascript"></script> <script>/*サポートしてない時のalertメッセージを抑止*/$.ws.wsSetup({nonosupportmsg:true});</script> <div id="wsdemos"></div>

【info】いつもいろいろなテストなどをページ内のあちこちでやっているので、重かったり、壊れていたりするf^^;ことも多いです。実験用ですので、カオス(混沌)をあえて意図したりもしますので、標準やValidとは無縁だったりしますが、何卒、ご了承ください ( _ _ b

【info】 最近はTwitterでぶつぶつ言ってることが多いです。
>http://twitter.com/toshirot

2005年06月28日

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

Ajax , jslb_ , jslb_ajax , ライブラリ ブックマークに追加する ブックマーク-- 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.516 2008.03.02 sload時のdataの前に&抜け修正。
    //  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.516, 
    		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=='')?'':'&')+data;
    
    			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

      guest ( 2008年09月03日 14:48 )

      before
      url += ((url.indexOf('?')==-1)?'?':'')+data;

      after
      url += ((url.indexOf('?')==-1)?'?':'&')+data;

      高橋 ( 2008年09月04日 12:50 )

      guestさんありがとうございます。
      その問題はv0.516で次のように修正してあります。

      url += ((url.indexOf('?')==-1)?'?':(data=='')?'':'&')+data;

      このページのソースが515でしたね。すみません。

      高橋 ( 2008年09月04日 12:54 )

      このエントリページのソースをv516に差し替えました。

      T ( 2008年09月10日 15:59 )

      このライブラリを使用すると、エラーログが
      出力されませんか?

      T ( 2008年09月10日 16:31 )

      ちなみに私の環境では
      サーバーのエラーログに以下のエラーが出力されてしまいます。

      [client XXX.XXX.XXX.152] Wed, 10 Sep 2008 14:32:34 +0900 - Got event.. agents, referer: http://XXX.XXX.XXX.231/aaa/aaa.php?module=Aaa&action=Bbb
      [client XXX.XXX.XXX.152] Wed, 10 Sep 2008 14:32:34 +0900 - No event handler for event 'agents', referer: http://XXX.XXX.XXX.231/aaa/aaa.php?module=Aaa&action=Bbb
      [client XXX.XXX.XXX.152] Wed, 10 Sep 2008 14:32:34 +0900 - Got event.. agentscomplete, referer: http://XXX.XXX.XXX.231/aaa/aaa.php?module=Aaa&action=Bbb
      [client XXX.XXX.XXX.152] Wed, 10 Sep 2008 14:32:34 +0900 - No event handler for event 'agentscomplete', referer: http://XXX.XXX.XXX.231/aaa/aaa.php?module=Aaa&action=Bbb

      高橋 ( 2008年09月11日 01:23 )

      そのサーバーはhttpdなのですよね?このエラーログの設定がどういうものなのかわかりませんので、なんともいえませんが、普通に考えて、このライブラリがhttpdのエラーの原因になる理由はちょっと思い浮かびません。

      その設定の詳細はわかりませんでしょうか?

      そのサーバーはどういう処理をagentsに期待しているのでしょうか?"Got event.. agents" や "No event handler for event" という言い回しを見たことが無いので、、、。

      T ( 2008年09月11日 09:47 )

      すみません。
      こちらの環境の問題でした。
      私の勉強不足でご迷惑をおかけいたしました。

      S ( 2008年11月04日 23:02 )

      function sendRequest(callback,data,method,url,async,sload,user,password)
      のパラメータで、"async"=false(同期)で設定した場合、
      データ送受信時にIEだと動作異常を起こしてしまうのですが、
      この対策方法などはあるのでしょうか?

      高橋 ( 2008年11月04日 23:34 )

      Sさん今晩は。その異常を起こしているサンプルを見ることはできますか? IEのバージョンはわかりますか?

      今、こちらで試した v0.516+WinXP IE6で第六引数をfalseにしたものでは特に問題はありませんでした。IE7や8ですか?

      やま ( 2009年02月14日 13:46 )

      Firefoxでv0.516を動かしたんですが
      oj.openのところで
      uncaught exception: Access to restricted URI denied (NS_ERROR_DOM_BAD_URI)
      と出てしまい動きませんでした
      Firebugでデバックしてわかりまして
      調べてもセキュリティに引っかかってるような
      ことが書かれているんですがよくわかりません
      対処方法ないでしょうか?

      やま ( 2009年02月14日 15:26 )

      追加書き込み
      表示しているサーバと読み込みしているサーバが違うとエラーになるみたいですね。
      IEはエラーにならないみたいですが、ほかのブラウザはエラーになりますね。
      個々にエラーを回避するような設定が必要になるみたいなのかな?

      やま ( 2009年02月14日 16:19 )

      すみません、クロスドメインでajaxは使えないんですね
      ほかの方法を考えないといけないか


      【コメント】(←clickで入力欄open)





  • AllaboutのJavaScript記事を連載させていただいてます。最近は、jQueryを主に取り上げていますが、多少なりとも参考になれば幸いです。