我试图弄清楚如何找出(异步)HttpRequest(来自'dart:html')失败的确切原因,老实说,我在这里有点迷失了。
onError 回调只接收 HttpRequestProgressError 对象,它没有任何用处,并且 HttpRequest 对象本身的“状态”设置为“0”以防失败,甚至控制台显示“加载资源失败”没有详细信息。
我想知道确切的原因——比如“连接被拒绝”或“主机名未解析”。
这可能吗?
谢谢!
我试图弄清楚如何找出(异步)HttpRequest(来自'dart:html')失败的确切原因,老实说,我在这里有点迷失了。
onError 回调只接收 HttpRequestProgressError 对象,它没有任何用处,并且 HttpRequest 对象本身的“状态”设置为“0”以防失败,甚至控制台显示“加载资源失败”没有详细信息。
我想知道确切的原因——比如“连接被拒绝”或“主机名未解析”。
这可能吗?
谢谢!
不幸的是,没有属性可以根据您的需要详细报告错误。原因是 JavaScript 不支持这一点。
对象上有属性status
和(您可以从您的with中获取,但它们代表 HTTP 状态代码。所有其他错误的状态代码都为 0 - 请求失败。这可能是任何东西,唯一要看的地方是浏览器的控制台,因为这是浏览器抛出的异常。statusText
HttpRequest
HttpRequestProgressEvent
evt.target
如果您的请求是同步的,您可以send()
用 try-catch 包围。如果您的请求是异步的,这将不起作用。
#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);
}
}
}