私は XHR が初めてで、単純なユースケースを解決しようとしています。私は、JavaScript がデータを取得する Web サーバーを持っています。ただし、データ自体を提供する代わりに、サーバーは javascript XHR リクエストを別の場所 (Amazon の S3 上のファイルなど) にリダイレクトして、リクエストを実行します。
これが私をクロスドメイン XHR の世界に導きました。それについて少し読んでも、単純な例でさえ機能することができません。JavaScript を含む Web ページを提供するメイン ドメインのヘッダーに「Access-Control-Allow-Origin: *」を追加しています。しかし、うまくいきません。私は何が欠けていますか?これはブラウザに関係なく機能する必要があるため、最初のサーバーがプロキシとして機能する以外にできることを探しています。これにより、リクエストを S3 にオフロードするという目的が無効になります。
- Chrome : 2 回目の呼び出しで「Exception: NetworkError: DOM Exception 19」が発生します。
- IE : 警告を表示しますが、確認後に 2 番目の URL を開きます。
- Firefox : 2 回目の呼び出しで「Exception: Faliure」とだけ表示されます。
test.php のコードは次のとおりです。
<?php
header('Content-type: text/html');
header('Access-Control-Allow-Origin: *');
?>
<!DOCTYPE html>
<html>
<header>
<script type="text/javascript">
var request;
var url1 = "data/file.csv";
var url2 = "http://stackoverflow.com/users/1293955/ng-algo";
try
{
if (window.XMLHttpRequest) {
// IE7+, Firefox, Chrome, Opera, Safari
request = new XMLHttpRequest();
}
else {
// code for IE6, IE5
request = new ActiveXObject('Microsoft.XMLHTTP');
}
// load data. 'false' indicates that further script
// is not executed until data is loaded and parsed
alert("Test1 with url: "+url1);
request.open('GET', url1, false);
request.send();
alert(request.responseText);
alert("Test2 with url: "+url2);
request.open('GET', url2, false);
request.send();
alert(request.responseText);
} catch (e) { alert("Exception: "+e.message); }
</script>
</header>
This is a test page
</html>