0

我正在发出 PUT 请求,以使用 Javascript 中的 xmlhttprequest 将对象上传到 S3 存储桶。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 调试器下的网络选项卡中,我可以看到一个 HTTP 请求,其中方法为 OPTIONS,类型为挂起。

我看不到正在发送的实际 PUT 请求。谁能告诉我问题是什么以及异常意味着什么?

更新:仔细查看从 jsfiddle 和我的应用程序发送的请求后。我看到 2 个请求从 JS Fiddle 发送一个预检 HTTP OPTIONS 请求,然后是实际的 PUT 请求。

虽然它在 JS fiddle 上运行良好,但另一方面,我的应用程序中的相同代码发送了一个预检 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 回答