我正在使用Javascript中的xmlhttprequest向PUT请求将对象上传到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请求,其中Method为OPTIONS,Type为待定。
我看不到发送的实际PUT请求。谁能告诉我问题是什么以及Exception意味着什么?
更新: 仔细查看从jsfiddle和我的应用程序发送的请求之后。我看到有两个请求是从JS Fiddle发送的预检HTTP OPTIONS请求,之后是实际的PUT请求。
虽然它在JS小提琴上效果很好,但另一方面,我的应用程序中的相同代码发送了预检HTTP OPTIONS请求,但是没有得到200返回状态待定。这就是它失败的原因。
为什么我没有为HTTP OPTIONS请求获得成功的任何想法。