经过多次尝试在HttpRequest中获取响应的内容后,我完全无法知道或理解为什么我不能拥有我想要的内容,我必须提到我只能在onReadyStateChange内部记录和操作响应( onLoad和onLoadEnd给了我相同的结果!),但我真的希望在回调之外的那个值。
以下是我遇到的代码部分
Map responsData;
req=new HttpRequest()
..open(method,url)
..send(infojson);
req.onReadyStateChange.listen((ProgressEvent e){
if (req.readyState == HttpRequest.DONE ){
if(req.status == 200){
responsData = {'data': req.responseText};
print("data receaved: ${ req.responseText}");
//will log {"data":mydata}
}
if(req.status == 0){
responsData = {'data':'No server'};
print(responsData );
//will log {"data":No server}
}
}
});
//anything here to get responsData won't work
答案 0 :(得分:1)
您必须在调用send之前分配onLoad回调。 我不确定你的意思只在onReadyStateChange里面。 也许你想将responseText分配给回调之外的变量。
创建方法:
Future<String> send(String method, String url, String infojson) {
var completer = new Completer<String>();
// var result;
req=new HttpRequest()
..open(method,url)
..onLoad.listen((event) {
//print('Request complete ${event.target.reponseText}'))
// result = event.target.responseText;
completer.complete(event.target.responseText);
})
..send(infojson);
return completer.future;
}
并将此方法称为
var result;
send(method, url).then(
(e) {
// result = e;
print('Request complete ${e}'));
});