我允许用户通过ajax调用从Web服务器授予他们签名的URL,从而将文件上传到亚马逊s3存储桶。
每隔一段时间,请求就会变得混乱,给我一个403(至于为什么我不知道)。我已经尝试了在我的xhr请求中包含的catch块,但是这个异常不会被捕获。
看起来像这样
https://bucket.s3.amazonaws.com/hB22C1m9KAll477LWIGx42fTuK4htm?AWSAccess ... JKQ6DXF43A&安培;过期= 1385394844&安培;签名= / OKomeLHinfcDvm30O / 9B + 9edkw = 403(禁止) bucket.s3.amazonaws.com/hB22C1m9KQ6DXF4TuK4htm?AWSAccessKeyId=AK...Q62CNKF3PC3QLA&Expires=1385394844&Signature=/OKomeLHkplfcDvm30O/9b+9edkw=:1
所以2个问题。
答案 0 :(得分:2)
如果发出CORS请求时出错,则会触发XMLHttpRequest的onError
处理程序。您将不会获得有关错误发生原因的任何有用信息,但您会知道存在错误。有关详细信息,请参阅以下问题:Is it possible to trap CORS errors?
至于为什么你会遇到一个禁止的错误,这很难知道。您对网址过期的评估可能是可能的,特别是如果每次请求都需要的时间超过预期。
答案 1 :(得分:1)
通过检查onreadystatechange事件,可以捕获通过xhr发送的CORS请求的异常异常。
xhr.onreadystatechange = ƒ(e) {
if (this.readyState === 4 && this.status === 200) {
try {
console.log('good');
}
catch (error) {
alert("There has been an error");
console.log(error);
return false;
}
callback();
}
else if (this.readyState === 4 && this.status !== 200) {
console.log('There has been an error');
}
};