fetch
Commandfetch <stringLike> [ as [ a | an ]( json | Object | html | response ) ] [<object literal> | 'with' <naked named arguments>]
The fetch
command issues a fetch request to the
given URL. The URL can either be a naked URL or a string literal.
By default the result will be processed as text, but you can have it processed
as JSON, as HTML, or as a raw response object by adding the as json
, as html
or as response
modifiers.
Additionally, you can use conversions directly on the response text.
This command saves the result into the it
variable.
This command is asynchronous.
The fetch
command supports both timeouts as well as request cancellation.
To add a timeout to a request syntactically, you can use add a timeout
property using the with
form:
<button _="on click fetch /example with timeout:300ms
put the result into my innerHTML">
Get from /example!
</button>
To cancel a fetch request, send a fetch:abort
event to the element that triggered the request:
<div>
<button id="btn1"
_="on click
add @disabled
fetch /example
put the result after me
finally
remove @disabled">
Get Response
</button>
<button _="on click send fetch:abort to #btn1">
Cancel The Request
</button>
</div>
If you need to fetch from a dynamically-generated URL, just use a template literal string (the ones with the backticks) as the URL. For example:
set userId to my [@data-userId]
fetch `/users/${userId}/profile` as JSON
The fetch
command features a few events that can be listened to (using hyperscript or javascript) to do things
like configure the fetch options, update UI state, etc.
event | description |
---|---|
hyperscript:beforeFetch |
(Deprecated, use fetch:beforeRequest ) Fired before a fetch request, can be used to configure headers, etc. |
fetch:beforeRequest |
Fired before a fetch request, can be used to configure headers, etc. |
fetch:afterResponse |
Fired after a fetch request completes but before the response is processed, can be used to mutate the response. |
fetch:afterRequest |
Fired after a fetch response has been processed. |
fetch:error |
Fired when an error occurs. |
Below are a two examples showing how to configure an X-AuthToken
header using the fetch:beforeRequest
event:
<body _="on fetch:beforeRequest(headers)
set headers['X-AuthToken'] to getAuthToken()">
...
</body>
document.body.addEventListener('fetch:beforeRequest', (event) => {
event.detail.headers['X-AuthToken'] = getAuthToken();
});
<button _="on click fetch /example
put it into my innerHTML">
Get from /example!
</button>
<button _='on click fetch /test as json with method:"POST"
put `${its result}` into my innerHTML'>
Post to /test!
</button>
<button _="on click fetch `${pageUrl}` as html
get the textContent of the <h1/> in it
call alert(result)">
Get the title of the page!
</button>
<div _='on click fetch /number as Number with method:"POST"
put "${the result + 1}" into my innerHTML'>
Increment!
</div>