2

经过多次尝试在 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
4

1 回答 1

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}'));
  });
于 2013-11-03T21:33:35.433 回答