我有一个使用google drive api上传文件的网络应用。如果身份验证过期,我们会返回401,允许应用重新进行身份验证并重试。这在Chrome中运行良好,返回401并且一切都很美好。
然而在IE10中,jqXHR.status是404而不是401.当我查看IE网络分析器时,请求确实返回401,但它不是jquery给出的:
https://www.googleapis.com/upload/drive/v2/files/0B_Z9rTaY-rm0T2xGRC1LcjdrTnM?uploadType=multipart
PUT 401 application/json 508 B
437 ms XMLHttpRequest 74272 0 374 0 0 433979
IE中的控制台错误
SCRIPT7002: XMLHttpRequest: Network Error 0x80070005, Access is denied.
示例ajax调用
$.ajax("https://www.googleapis.com/upload/drive/v2/files" + up + "?uploadType=multipart", {
data: data,
headers: {Authorization: 'Bearer ' + self.authResult.access_token},
contentType: false,
processData: false,
type: fileId != null ? 'PUT' : 'POST',
success: function(data) {
log.debug("upload complete");
},
error: function(jqXHR, textStatus, errorThrown) {
var errorCode = jqXHR.status;
log.error("failed to upload file " + errorCode);
}
}
以下是一个类似的问题,但我已经在建议使用错误回调的解决方案:
我需要确定它实际上是401错误,以便我可以启动重新验证过程。为什么401被隐藏?我如何识别它实际上是一个导致请求失败的身份验证错误?