HttpRequest使用sendData作为查询参数GET?

时间:2014-01-03 14:32:29

标签: dart dart-io

这个问题与HTTPRequest.request with sendData, can't seem to get this to work有点重复,但我现在得到了更多信息。这里的目标是发送附加了查询参数的GET请求。我最初试图发送我的请求:

HttpRequest request = new HttpRequest();

request.open("GET", _url, async:true);
request.onError.listen(_onLoadError, onError: _onLoadError);
request.send(sendData);

其中sendData是遵循查询参数的正常格式的字符串(?myVariable = 2& myOtherVariable = a等),因为这是此处的最终目标。请求被发送,但我从未在任何监视工具(我使用Charles)中看到任何其他数据(sendData)。然后我尝试了:

HttpRequest request = new HttpRequest();

request.open("GET", _url + sendData, async:true);
request.onError.listen(_onLoadError, onError: _onLoadError);
request.send();

所以现在我只是将查询字符串附加到url本身。这按预期工作,但远非优雅。有更好的解决方案吗?

3 个答案:

答案 0 :(得分:9)

GET请求中,您始终将查询字符串添加到URL? 当您创建Uri时,如果您发现它更优雅,则可以使用查询参数传入地图。

Map query = {'xx':'yy', 'zz' : 'ss'};
String url = "http://localhost:8080/myapp/signinService";

Uri uri = new Uri(path: url, queryParameters : query);

HttpRequest.getString(uri.toString().then((HttpRequest req) ...

答案 1 :(得分:3)

根据W3 XMLHttpRequest Specification

  

(在send()方法中)如果请求方法是GET或HEAD,则忽略该参数。

对这个问题的简单回答是否定的。 sendData不能附加到GET请求,这是通过XMLHttpRequest规范而不是Dart的限制。

也就是说,对于这样的请求,使用HttpRequest.getString

可能更具可读性和惯用性
HttpRequest.getString(_url + sendData).then((HttpRequest req) {
    // ... Code here
}).catchError(_onLoadError);

答案 2 :(得分:0)

如果要从url(String)+查询参数(Map)生成有效的URL,可以执行以下操作:

 Uri uri = Uri.parse(url).replace(queryParameters: parameters);
 String finalURL = uri.toString();

网址为String,参数为Map