2013-11-03 17 views
2

經過多次嘗試獲取HttpRequest中的響應內容後,我完全無法知道或理解爲什麼我不能擁有我想要的內容,而且我必須提及,我只能在onReadyStateChange(onLoad)內記錄和操作響應並onLoadEnd給我同樣的結果!),但我真的想在回調之外的價值。如何訪問Dart中HttpRequest響應的結果?

這裏是代碼的一部分,我是堅持了

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 

回答

1

你有你打電話發之前分配一個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}')); 
    }); 
+0

是的,我想分配,以便回調外的變量響應發送類的外部數據,okey我會嘗試這個解決方案,我會盡快給你一個反饋,謝謝你的幫助,這意味着很多! –

+0

我試過你的解決方案,它不錯,但仍然不是我需要的,它只給出了回調塊的移動性,以便在其他類中使用它,但它不允許在其外部獲得響應值!請如果我誤解你在那裏做了什麼讓我知道! –

+0

我很難知道你想做什麼。我補充說道,也許這就是你想要的。回調方法是閉包。您可以像在註釋掉的行中那樣訪問方法之外的變量。您可以在onLoad()回調函數或then()回調函數中完成此操作。 –