从CORS请求中捕获异步异常

时间:2013-11-25 15:45:11

标签: javascript exception amazon-s3 cors

我允许用户通过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个问题。

  • 是否可以从CORS请求中捕获异步异常?
  • 为什么我会被禁止? (我唯一可以想到的是,如果URL过期,但我有一个很长的超时,并且它会在通过AJAX从服务器收到的那一刻起使用。)

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');
      }
    };