[プログラム学習] JavaScript #4 「ファイル読み込み」

2015年11月9日

Javascript テクノロジー プログラミング 学習 特集

JavaScriptはブラウザ言語であるため、サーバーに設置されているファイルを読み込むのは非常に苦労します。 しかも読み込みを行う方法としては以下の方法しかありません。
1.JavaScriptファイルを読み込む 2.AJAXを利用して非同期で読み込む(ファイル直接アクセス) 3.AJAXを利用してサーバーサイド言語と連動して読み込む(他の言語連動)

サンプル

1.JavaScriptファイルを読み込む

var script = document.createElement("script"); script.type = "text/javascript";//HTML4ではこの記述は必須です。HTML5は不用になりました。 script.src = "http://hoge.com/add.js";//読み込み対象ファイルをhttpプロトコルのフルパスで記述します。 document.body.appendChild(script); ※この場合の難点は、「httpプロトコルのフルパス」でアクセスできないファイルの場合はお手上げです。

2.AJAXを利用して非同期で読み込む(ファイル直接アクセス)

var ajax = { xmlObj:function(f){ var r=null; try{ r=new XMLHttpRequest(); } catch(e){ try{ r=new ActiveXObject("Msxml2.XMLHTTP"); } catch(e){ try{ r=new ActiveXObject("Microsoft.XMLHTTP"); } catch(e){ return null; } } } return r; }, /** * XMLHttpRequestオブジェクト生成 */ set:function(option){ if(!option){return} ajax.httpoj = ajax.createHttpRequest(); if(!ajax.httpoj){return;} //open メソッド; ajax.httpoj.open(option.method , option.url , option.async); ajax.httpoj.setRequestHeader('Content-Type', 'application/x-www-form-urlencoded'); //受信時に起動するイベント; ajax.httpoj.onreadystatechange = function(){ //readyState値は4で受信完了; if (this.readyState==4){ alert(this.responseText); } }; //query整形 var data = []; if(typeof(option.query)!="undefined"){ for(var i in option.query){ data.push(i+"="+encodeURIComponent(option.query[i])); } } if(typeof(option.querys)!="undefined"){ for(var i=0;i<option .querys.length;i++){ data.push(option.querys[i][0]+"="+encodeURIComponent(option.querys[i][1])); } } //send メソッド if(data.length){ ajax.httpoj.send( data.join("&") ); } else{ ajax.httpoj.send(); } }, createHttpRequest:function(){ //Win ie用 if(window.ActiveXObject){ try { //MSXML2以降用; return new ActiveXObject("Msxml2.XMLHTTP") } catch(e){ try { //旧MSXML用; return new ActiveXObject("Microsoft.XMLHTTP") } catch(e2){ return null } } } //Win ie以外のXMLHttpRequestオブジェクト実装ブラウザ用; else if(window.XMLHttpRequest){ return new XMLHttpRequest() } else{ return null } } }; ajax.set({ url:"%読み込むファイルのURL%", methos:"post", async:true }); ※この場合の難点も、「httpプロトコルのフルパス」でアクセスできないファイルの場合はお手上げです。 また、サーバー設定で、x-frame-optionというのをセットされていると、外部ドメインでは取得できなくなるので、要注意です。

3.AJAXを利用してサーバーサイド言語と連動して読み込む(他の言語連動)

var ajax = { xmlObj:function(f){ var r=null; try{ r=new XMLHttpRequest(); } catch(e){ try{ r=new ActiveXObject("Msxml2.XMLHTTP"); } catch(e){ try{ r=new ActiveXObject("Microsoft.XMLHTTP"); } catch(e){ return null; } } } return r; }, /** * XMLHttpRequestオブジェクト生成 */ set:function(option){ if(!option){return} ajax.httpoj = ajax.createHttpRequest(); if(!ajax.httpoj){return;} //open メソッド; ajax.httpoj.open(option.method , option.url , option.async); ajax.httpoj.setRequestHeader('Content-Type', 'application/x-www-form-urlencoded'); //受信時に起動するイベント; ajax.httpoj.onreadystatechange = function(){ //readyState値は4で受信完了; if (this.readyState==4){ alert(this.responseText); } }; //query整形 var data = []; if(typeof(option.query)!="undefined"){ for(var i in option.query){ data.push(i+"="+encodeURIComponent(option.query[i])); } } if(typeof(option.querys)!="undefined"){ for(var i=0;i<option .querys.length;i++){ data.push(option.querys[i][0]+"="+encodeURIComponent(option.querys[i][1])); } } //send メソッド if(data.length){ ajax.httpoj.send( data.join("&") ); } else{ ajax.httpoj.send(); } }, createHttpRequest:function(){ //Win ie用 if(window.ActiveXObject){ try { //MSXML2以降用; return new ActiveXObject("Msxml2.XMLHTTP") } catch(e){ try { //旧MSXML用; return new ActiveXObject("Microsoft.XMLHTTP") } catch(e2){ return null } } } //Win ie以外のXMLHttpRequestオブジェクト実装ブラウザ用; else if(window.XMLHttpRequest){ return new XMLHttpRequest() } else{ return null } } }; ajax.set({ url:"import.php", methos:"post", async:true, query:{"filePath":"%ファイルパス%"} }); # import.php <? php file_get_contents($_REQUEST["filePath"]) ※どの場合も対応できますが、サーバーサイドに読み込み用のプログラムを設置しなければいけないため、構成を熟知しておく必要があります。 ※同一サーバーに設置していあるテキストファイルを読み込む事ができます。

注意点

通常のサーバーサイド限度では、readやfile_get_contentsやopenなどの関数を使って配置されているファイルを簡単に読み込むことが出来るんですが、この辺がブラウザ言語の悲しいトコロですね。