3

这个问题有点像HTTPRequest.request 和 sendData 的重复,似乎无法让它工作,但我现在有了更多信息。这里的目标是发送一个带有查询参数的 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 等)的字符串,因为这是这里的最终目标。请求被发送,但我从未在任何监控工具中看到任何额外的数据(sendData)(我使用的是 Charles)。然后我尝试了:

HttpRequest request = new HttpRequest();

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

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

4

3 回答 3

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) ...
于 2014-01-03T14:54:19.067 回答
3

根据W3 XMLHttpRequest 规范

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

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

也就是说,对于这样的请求,使用HttpRequest.getString可能更具可读性和惯用性

HttpRequest.getString(_url + sendData).then((HttpRequest req) {
    // ... Code here
}).catchError(_onLoadError);
于 2014-01-03T14:40:44.067 回答
0

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

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

url 是 aString并且参数是 aMap

于 2018-06-03T05:39:04.717 回答