2011-08-03 10 views
0

私はAJAXの初心者で、自分のデスクトップにあるすべてのコードを自分のデスクトップに置いて、AJAXを使ってHTML内のdivのファイルコンテンツを出力しています。 AJAXを介してローカルファイルにアクセスすることも、ファイルをサーバー上に置く必要がありますか?AJAXを使ってローカルファイルを読む

その示すエラー.jsファイルに

+0

ローカルファイル? ajaxリクエストは、HTTP経由でリソースを取得するためのものです。 – BiAiB

+0

相対パスをリクエストしてください。それ以外の場合は、コンテンツアクセスポリシーによってブロックされます。 –

+0

AJAXの要点は、**クライアント**から**サーバー**にリクエストを送信することです** –

答えて

1

を「アクセスが拒否されました」とJavascriptがクライアント側での作業ですが、にできない、それようのアクセスが制限されてきた私は初めてのAJAX機能をテストしていると私は問題に直面していますクライアントマシンからローカルファイルにアクセスします。

したがって、あなたはajaxを使用してdivでデータを取得してクライアントを表示するよりも、コンテンツをサーバーに配置する必要があります。

3

ファイルアクセスは、ブラウザのJavaScriptの実装では、最初から禁止されています。誰かがブラウザの「セキュリティ機能」を手動で無効にすることができます。たとえば、Google Chromeの場合、コマンドライン引数として--disabled-web-securityで実行可能ファイルを起動する必要があります。 Firefoxはその中でそれを無効にすることができますabout:config

とにかく、あなたが一般向けのコードを書いているならば、もちろんそのことに頼ることはできません。しかし、トンネルの終わりには光があります。 「新しい」Javascript File APIはすでにChromeで利用可能ですが、他のベンダーもまもなく私は思います。そのAPIは "正式に"あなたのスクリプトがローカルマシン上のファイルを読むことを可能にします。

8

セキュリティ上の理由から、クライアント上のファイルシステムへのJavaScriptのアクセスは制限されています。あなたの重要な文書を(他の誰かの)JavaScriptで読みたいかどうかを検討してください。

現実的なトポロジで作業することをお勧めしますが、実際のシステムで提供されるサーバーからのものを提供してください。

開発ディレクトリを指すようにApacheなどのWebサーバーを設定するのは本当に簡単なので、「サーバー」は偽装したデスクトップだけです。したがって、編集/テストサイクルは本当に速いです。

+1

オフラインプロジェクトは、 'my_project'というフォルダにあります。ですから、私はindex.htmlから、 'my_project'フォルダにxmlファイルをリクエストする必要があります。なぜこれがセキュリティの可用性であるのか分かりません。私のプロジェクトをサーバにアップロードし、index.htmlからサーバからxmlファイルをリクエストした場合、それはなぜですか?ちょっと興味があるんだけど。 – Chameleon

+1

@Chameleon:違いは* who *がそのフォルダから読んでいることです。オンラインの場合、* Webサーバーソフトウェア*は直接読書をしており、クライアントは間接的に*読んでいます。 Webサーバーに適切な権限がない場合、それも失敗します。 – user7116

-1

Ajaxを使用してローカルでファイルにアクセスできるように、mozilla firefoxで試してみました。うまくいきました。私は2つのテキストファイルを作成し、同じフォルダにペースを入れました。ここにコードがあります。申し訳ありませんが間違いがある場合。

function getXmlHttpRequestObject() { 
    if (window.XMLHttpRequest) { 
     return new XMLHttpRequest(); //Not IE 
    } 
    else if(window.ActiveXObject) { 
     return new ActiveXObject("Microsoft.XMLHTTP"); //IE 
    } 
    else { 
     alert("Your browser doesn't support the XmlHttpRequest object. Better upgrade to Firefox."); 
    } 
}   
var receiveReq = getXmlHttpRequestObject();  
function sayHello(fname) { 
    if (receiveReq.readyState == 4 || receiveReq.readyState == 0) { 
     receiveReq.open("GET", fname, true); 
     receiveReq.onreadystatechange = handleSayHello; 
     receiveReq.send(null); 
    }   
} 
function handleSayHello() { 
    if (receiveReq.readyState == 4) { 
     document.getElementById('span_result').innerHTML = receiveReq.responseText; 
    } 
} 

Here is the html code 
<select name="files" onchange="sayHello(this.value)"> 
<option value="">Select a file</option> 
<option value="file.txt">file.txt</option> 
<option value="file2.txt">file2.txt</option> 
<option value="ajax.html">Ajax.html</option> 
</select><br> 
<p>Contents of the file will be displayed below</p> 
<div id="span_result"></div> 
1

テスト用にしたいのであれば、クロームでウェブセキュリティを無効にすることができます。

関連する問題