0

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 リクエストが成功しない理由を教えてください。

4

1 に答える 1

0

わかりました。バグがあります。CORSとは関係ありません。PUT リクエストを実行しようとしている URL は http://bucket-name.s3.amazon aws .com/である必要があります

于 2013-07-23T00:08:18.400 に答える