)
Creates and sends a URL request for the specified url
.
By default request
will perform an HTTP GET request, but a different
method (POST
, PUT
, DELETE
, etc) can be used by specifying the
method
parameter. (See also HttpRequest.postFormData for POST
requests only.
The Future is completed when the response is available.
If specified, sendData
will send data in the form of a ByteBuffer,
Blob, Document, String, or FormData along with the HttpRequest.
If specified, responseType
sets the desired response format for the
request. By default it is String, but can also be 'arraybuffer', 'blob',
'document', 'json', or 'text'. See also HttpRequest.responseType
for more information.
The withCredentials
parameter specified that credentials such as a cookie
(already) set in the header or
authorization headers
should be specified for the request. Details to keep in mind when using
credentials:
- Using credentials is only useful for cross-origin requests.
- The
Access-Control-Allow-Origin
header ofurl
cannot contain a wildcard (*). - The
Access-Control-Allow-Credentials
header ofurl
must be set to true. - If
Access-Control-Expose-Headers
has not been set to true, only a subset of all the response headers will be returned when callinggetAllRequestHeaders
.
The following is equivalent to the getString sample above:
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.
});
Here's an example of submitting an entire form with 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.
});
Note that requests for file:// URIs are only supported by Chrome extensions with appropriate permissions in their manifest. Requests to file:// URIs will also never fail- the Future will always complete successfully, even when the file cannot be found.
See also: authorization headers.
Source
/**
* Creates and sends a URL request for the specified [url].
*
* By default `request` will perform an HTTP GET request, but a different
* method (`POST`, `PUT`, `DELETE`, etc) can be used by specifying the
* [method] parameter. (See also [HttpRequest.postFormData] for `POST`
* requests only.
*
* The Future is completed when the response is available.
*
* If specified, `sendData` will send data in the form of a [ByteBuffer],
* [Blob], [Document], [String], or [FormData] along with the HttpRequest.
*
* If specified, [responseType] sets the desired response format for the
* request. By default it is [String], but can also be 'arraybuffer', 'blob',
* 'document', 'json', or 'text'. See also [HttpRequest.responseType]
* for more information.
*
* The [withCredentials] parameter specified that credentials such as a cookie
* (already) set in the header or
* [authorization headers](http://tools.ietf.org/html/rfc1945#section-10.2)
* should be specified for the request. Details to keep in mind when using
* credentials:
*
* * Using credentials is only useful for cross-origin requests.
* * The `Access-Control-Allow-Origin` header of `url` cannot contain a wildcard (*).
* * The `Access-Control-Allow-Credentials` header of `url` must be set to true.
* * If `Access-Control-Expose-Headers` has not been set to true, only a subset of all the response headers will be returned when calling [getAllRequestHeaders].
*
* The following is equivalent to the [getString] sample above:
*
* 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.
* });
*
* Here's an example of submitting an entire form with [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.
* });
*
* Note that requests for file:// URIs are only supported by Chrome extensions
* with appropriate permissions in their manifest. Requests to file:// URIs
* will also never fail- the Future will always complete successfully, even
* when the file cannot be found.
*
* See also: [authorization headers](http://en.wikipedia.org/wiki/Basic_access_authentication).
*/
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) {
// Note: file:// URIs have status of 0.
if ((xhr.status >= 200 && xhr.status < 300) ||
xhr.status == 0 || xhr.status == 304) {
completer.complete(xhr);
} else {
completer.completeError(e);
}
});
xhr.onError.listen(completer.completeError);
if (sendData != null) {
xhr.send(sendData);
} else {
xhr.send();
}
return completer.future;
}