我试图弄清楚如何找出(异步)HttpRequest(来自' dart:html')失败的确切原因,而且,说实话,我在这里有点迷失。
onError回调只接收HttpRequestProgressError对象,它没有任何有用的东西,并且HttpRequest对象本身具有" status"设置为" 0"如果失败,甚至控制台显示"无法加载资源"没有细节。
我想知道的确切原因 - 例如"连接被拒绝"或者"主机名未解析"。
这有可能吗?
谢谢!
答案 0 :(得分:4)
不幸的是,没有任何属性可以按照您的要求详细报告错误。原因是JavaScript不支持这一点。
status
对象上有属性statusText
和HttpRequest
(您可以使用HttpRequestProgressEvent
从evt.target
获取,但这些属性代表HTTP状态每个其他错误都有状态代码0 - 请求失败。这可能是任何东西,唯一可以看的是浏览器的控制台,因为这是浏览器抛出的异常。
如果您的请求是同步的,则可以使用try-catch包围send()
。如果您的请求是异步的,则无法使用。
答案 1 :(得分:-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);
}
}
}