4

我正在使用插件 sdk 构建一个 Firefox 插件。我需要向某个页面发出 http 请求,我想处理连接超时,但在 api 中找不到任何内容:https ://addons.mozilla.org/en-US/developers/docs/sdk/latest /modules/sdk/request.html

我实际上正在寻找的是一个回调,以防客户端无法连接到服务器。

有没有办法做到这一点?

4

1 回答 1

9

onComplete当请求被认为对网络完成时,SDK 请求将始终调用。这意味着onComplete在任何情况下都会调用它,而不管请求是返回错误还是成功。

为了检测您遇到了哪个错误,您需要检查 Response 对象(传递给onComplete函数的对象)的属性“status”response.status)。它保存请求的状态代码。要查找状态代码,请考虑Mozilla 开发者网络上的列表。如果响应状态为 0,则请求完全失败,用户可能处于离线状态,或者无法到达目标。

超时可能是状态码 504 或 0。实现类似于:

var Request = require("sdk/request");

Request({
  url: "http://foo.bar/request.target",
  onComplete: function(response) {
    if(response.status==0||response.status==504) {
      // do connection timeout handling
    }
    // probably check for other status codes
    else {
      // assume the request went well
    }
  }
}).get();

我个人在请求对象上使用了一个验证函数,它返回一个数字,这取决于我是否得到了正确的响应、来自 Web 服务器的错误或连接问题(4xx 和 0 状态代码)。

于 2013-04-05T22:24:23.447 回答