如何从异步HttpRequest中检索错误的确切原因?

时间:2013-05-03 11:40:59

标签: dart

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

onError回调只接收HttpRequestProgressError对象,它没有任何有用的东西,并且HttpRequest对象本身具有" status"设置为" 0"如果失败,甚至控制台显示"无法加载资源"没有细节。

我想知道的确切原因 - 例如"连接被拒绝"或者"主机名未解析"。

这有可能吗?

谢谢!

2 个答案:

答案 0 :(得分:4)

不幸的是,没有任何属性可以按照您的要求详细报告错误。原因是JavaScript不支持这一点。

status对象上有属性statusTextHttpRequest(您可以使用HttpRequestProgressEventevt.target获取,但这些属性代表HTTP状态每个其他错误都有状态代码0 - 请求失败。这可能是任何东西,唯一可以看的是浏览器的控制台,因为这是浏览器抛出的异常。

如果您的请求是同步的,则可以使用try-catch包围send()。如果您的请求是异步的,则无法使用。

答案 1 :(得分:-1)

See here

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

}