4

我试图弄清楚如何找出(异步)HttpRequest(来自'dart:html')失败的确切原因,老实说,我在这里有点迷失了。

onError 回调只接收 HttpRequestProgressError 对象,它没有任何用处,并且 HttpRequest 对象本身的“状态”设置为“0”以防失败,甚至控制台显示“加载资源失败”没有详细信息。

我想知道确切的原因——比如“连接被拒绝”或“主机名未解析”。

这可能吗?

谢谢!

4

2 回答 2

4

不幸的是,没有属性可以根据您的需要详细报告错误。原因是 JavaScript 不支持这一点。

对象上有属性status和(您可以从您的with中获取,但它们代表 HTTP 状态代码。所有其他错误的状态代码都为 0 - 请求失败。这可能是任何东西,唯一要看的地方是浏览器的控制台,因为这是浏览器抛出的异常。statusTextHttpRequestHttpRequestProgressEventevt.target

如果您的请求是同步的,您可以send()用 try-catch 包围。如果您的请求是异步的,这将不起作用。

于 2013-05-03T12:52:06.237 回答
-1

看这里

#library('Request');

#import('dart:html');
#import("dart:json");

typedef void RequestHandler(String responseText);

typedef void ErrorHandler(String error);

class ResourceRequest {
  XMLHttpRequest request;
  RequestHandler _callbackOnSuccess;
  ErrorHandler _callbackOnFailure;

  ResourceRequest.openGet(String url, RequestHandler callbackOnSuccess, [ErrorHandler callbackOnFailure])
    :  request = new XMLHttpRequest(),
      _callbackOnSuccess = callbackOnSuccess,
       _callbackOnFailure = callbackOnFailure {
    request.open("GET", url, async : true);
    request.on.loadEnd.add((XMLHttpRequestProgressEvent e) => onLoadEnd(e));
  }

  void send() {
    request.send();
  }

  void onLoadEnd(XMLHttpRequestProgressEvent event) {
    if (request.readyState == 4 && request.status == 200) {
      _callbackOnSuccess(request.responseText);
    } else if (_callbackOnFailure != null) {
      _callbackOnFailure(request.statusText);
    }
  }

}
于 2013-05-03T11:53:19.553 回答