我正在发出 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 请求成功的任何想法。