0

次のコードを使用して、外部 xml ファイルを読み取ります。

if (window.XMLHttpRequest)
   {// code for IE7+, Firefox, Chrome, Opera, Safari

   xmlhttp=new XMLHttpRequest();
   }
 else
   {// code for IE6, IE5
   xmlhttp=new ActiveXObject("Microsoft.XMLHTTP");
   }
 xmlhttp.open("GET","myxmlfile.xml",false);
 xmlhttp.send();
 xmlDoc=xmlhttp.responseXML; 

しかし、上記のコードは Firefox でのみ動作し、Chrome/IE/Opera では動作しないようです。

Chrome では、クロス ドメイン アクセスが許可されていないため、コンソールにエラーが表示されますが、xml ファイル、js ファイル、および html ファイルはすべてローカル ハード ドライブの同じフォルダーにあります。

これについて何か助けはありますか?

ありがとう。

4

2 に答える 2

1

おそらく、http サーバーなしでローカルでテストしています。

基本的に ajax リクエストは同じドメインを使用して行う必要があります。別のサイトに ajax リクエストを行うと、ブラウザーによってブロックされます (これは、他の Web サイトからブラウザーの所有者のデータを読み取れないようにするためのセキュリティ機能です)。ほとんどのブラウザーは、(たとえば) 悪意のある電子メールの添付ファイルから保護するために、同じ方法でローカル ファイル システムへのアクセスをブロックします。次のようなエラーが表示されますXMLHttpRequest cannot load file:///path/to/your/data.html. Origin null is not allowed by Access-Control-Allow-Origin.

Linux または Mac を使用している場合、または python をインストールしている場合、http サーバーを起動する最も簡単な方法python -m SimpleHTTPServerは、html ファイルのルート ディレクトリでコマンドを使用するhttp://localhost:8000/file.htmlことです。 (IIS は既定のように特定のファイル拡張子をサポートしていないため.json、構成する必要がある場合があることに注意してください)。

http サーバーをいじらずにローカルでテストする必要がある場合は、Chrome を実行できます--allow-file-access-from-files(Chrome exe へのショートカットを更新するか、このスイッチを使用してターミナルから Chrome を実行します)。

于 2012-06-13T19:03:48.237 に答える
0

前述のように、正しくテストするには、ファイルを http サーバーに配置する必要があります。ローカルの Apache インスタンスを使用して、正しくテストできます。そうすれば、ajax 呼び出しがブラウザーによってブロックされることはありません。

于 2012-05-28T07:44:37.870 に答える