Метод запроса
Future<HttpRequest> request(Создает и отправляет запрос к указанному url.
По умолчанию request выполнит запрос HTTP GET, но можно использовать другой метод (POST, PUT, DELETE, и т. д.) указав параметр method. (См. также HttpRequest.postFormData для запросов POST только).
Future завершается, когда ответ доступен.
Если указано, sendData отправит данные в виде ByteBuffer, Blob, Document, String или FormData вместе с HttpRequest.
Если указано, responseType задаёт желаемый формат ответа для запроса. По умолчанию это String, но также может быть 'arraybuffer', 'blob', 'document', 'json' или 'text'. Смотрите также HttpRequest.responseType для получения дополнительной информации.
Параметр withCredentials указывает, что для запроса должны быть указаны такие аутентификационные данные, как cookie (уже) заданные в заголовке или заголовки авторизации. Важные моменты при использовании аутентификационных данных:
- Использование аутентификационных данных полезно только для междоменных запросов.
- Заголовок
Access-Control-Allow-Originurlне может содержать подстановочный знак (*). - Заголовок
Access-Control-Allow-Credentialsurlдолжен быть установлен в значение true. - Если
Access-Control-Expose-Headersне установлен в значение true, при вызовеgetAllRequestHeadersбудет возвращён только подмножество всех заголовков ответа.
Следующее эквивалентно примеру getString выше:
var name = Uri.encodeQueryComponent('John');
var id = Uri.encodeQueryComponent('42');
HttpRequest.request('users.json?name=$name&id=$id')
.then((HttpRequest resp) {
// Do something with the response.
});
Вот пример отправки всей формы с использованием FormData.
var myForm = querySelector('form#myForm');
var data = new FormData(myForm);
HttpRequest.request('/submit', method: 'POST', sendData: data)
.then((HttpRequest resp) {
// Do something with the response.
});
Обратите внимание, что запросы к URI file:// поддерживаются только расширениями Chrome с соответствующими разрешениями в манифесте. Запросы к URI file:// также никогда не завершатся ошибкой — Future всегда завершится успешно, даже когда файл не найден.
См. также: заголовки авторизации.
Источник
static Future<HttpRequest> request(String url,
{String method,
bool withCredentials,
String responseType,
String mimeType,
Map<String, String> requestHeaders,
sendData,
void onProgress(ProgressEvent e)}) {
var completer = new Completer<HttpRequest>();
var xhr = new HttpRequest();
if (method == null) {
method = 'GET';
}
xhr.open(method, url, async: true);
if (withCredentials != null) {
xhr.withCredentials = withCredentials;
}
if (responseType != null) {
xhr.responseType = responseType;
}
if (mimeType != null) {
xhr.overrideMimeType(mimeType);
}
if (requestHeaders != null) {
requestHeaders.forEach((header, value) {
xhr.setRequestHeader(header, value);
});
}
if (onProgress != null) {
xhr.onProgress.listen(onProgress);
}
xhr.onLoad.listen((e) {
var accepted = xhr.status >= 200 && xhr.status < 300;
var fileUri = xhr.status == 0; // file:// URIs have status of 0.
var notModified = xhr.status == 304;
// Redirect status is specified up to 307, but others have been used in
// practice. Notably Google Drive uses 308 Resume Incomplete for
// resumable uploads, and it's also been used as a redirect. The
// redirect case will be handled by the browser before it gets to us,
// so if we see it we should pass it through to the user.
var unknownRedirect = xhr.status > 307 && xhr.status < 400;
if (accepted || fileUri || notModified || unknownRedirect) {
completer.complete(xhr);
} else {
completer.completeError(e);
}
});
xhr.onError.listen(completer.completeError);
if (sendData != null) {
xhr.send(sendData);
} else {
xhr.send();
}
return completer.future;
}
© 2012 the Dart project authors
Licensed under the Creative Commons Attribution-ShareAlike License v4.0.
https://api.dartlang.org/stable/1.24.3/dart-html/HttpRequest/request.html