这个问题与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本身。这按预期工作,但远非优雅。有更好的解决方案吗?
答案 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