Javascript で xmlhttprequest を使用して、オブジェクトを S3 バケットにアップロードする PUT リクエストを作成しています。CORS は適切に設定されています。これは私が試しているコードです。
var bucketPath = 'http://<bucket-name>.s3.amazon.com/'
var fileName = <name> + ".json";
var uploadPath = bucketPath + fileName.replace(/\s/g,"+");
var xmlhttp;
if (window.XMLHttpRequest)
{// code for IE7+, Firefox, Chrome, Opera, Safari
xmlhttp=new XMLHttpRequest();
}
else
{// code for IE6, IE5
xmlhttp=new ActiveXObject("Microsoft.XMLHTTP");
}
xmlhttp.onreadystatechange=function()
{
if (xmlhttp.readyState==4 && xmlhttp.status==200)
{
showData();
}
else{
showError();
}
};
xmlhttp.open("PUT",uploadPath,false);
xmlhttp.send(JSON.stringify(jsonObject), replacer);
コードの最後の行で DOM Exception 19 が発生します。何が悪いのかわからない。サンプル テスト スクリプトで同じことを試してみましたが、うまくいきました。アプリケーションで完全に使用しようとした場合にのみ、この例外がスローされます。
Chrome デバッガーの [ネットワーク] タブで、メソッドが OPTIONS、タイプが保留中の HTTP リクエストを確認できます。
実際の PUT リクエストが送信されているのを確認できませんでした。問題の内容と例外の意味を誰か教えてもらえますか?
更新: jsfiddle と私のアプリケーションから送信されたリクエストを注意深く調べた後。プリフライト HTTP OPTIONS リクエストとその後の実際の PUT リクエストの 2 つのリクエストが JS Fiddle から送信されているのがわかります。
JS フィドルではうまく機能しますが、私のアプリケーションからの同じコードはプリフライト HTTP OPTIONS リクエストを送信しますが、ステータスが保留中の 200 を取得しません。それが失敗する理由です。
HTTP OPTIONS リクエストが成功しない理由を教えてください。