Search notes:

Javascript/BOM: Demonstration of the asynchronicity of window.fetch()

The following two files can be used to demonstrate the asynchronicity of the window.fetch() method.

service.php

service.php is a PHP script that takes a POST or GET parameter named sleepSeconds and then sleeps the indicated number of seconds. When it wakes up again, it returns a string to the originator of the request.
<?php
  header('text/plain');
  $sleepSeconds = $_REQUEST['sleepSeconds'];
  sleep($sleepSeconds);
  print("I just woke up after <b>$sleepSeconds seconds</b>.");
?>
Github repository Browser-Object-Model, path: /window/fetch/asynchronous/service.php

main.html

main.html is a HTML document that makes three fetch() requests to service.php: the first requesting to sleep 3 seconds, the second to sleep 1 second, the third to sleep 2 seconds.
When the fetch() request returns, the returned string is written into a prepared <div> element.
A log keeps track when the requests were made. It can be seen that the entries into the log are written within less than a fraction of a second, thus prooving that the fetch requests are made in parallel (or asynchronously).
<!DOCTYPE html>
<html>
<head>
  <meta content="text/html;charset=utf-8" http-equiv="Content-Type">
  <title>Asynchronous fetch</title>
</head>
<body>

<div id='s3'>Wait for request completion…</div>
<div id='s1'>Wait for request completion…</div>
<div id='s2'>Wait for request completion…</div>

<p>
<div id='log'></div>

<script>

    function makeRequest(s) {

       document.getElementById('log').innerHTML += new Date().toJSON() + ': Making request s=' + s + '<br>';

       window.fetch('/service.php',
       {
           method : 'POST',
           headers:{
                'Content-Type': 'application/x-www-form-urlencoded',
                'Accept'      : 'text/plain'
           },
           body   :  new URLSearchParams({
                      'sleepSeconds': s
                     })
       }).then(r => {
           if (r.status !== 200) {
              alert(r.status);
              return;
           }
           r.text().then(txt => {
            // document.getElementById('s' + s).innerText = txt;
               document.getElementById('s' + s).innerHTML = txt;
          });
       }).catch(e => {
           alert('Request produced an error: ' + e);
       });

    }

    makeRequest(3);
    makeRequest(1);
    makeRequest(2);

</script>

</body>
</html>
Github repository Browser-Object-Model, path: /window/fetch/asynchronous/main.html

See also

The window object

Index

Fatal error: Uncaught PDOException: SQLSTATE[HY000]: General error: 8 attempt to write a readonly database in /home/httpd/vhosts/renenyffenegger.ch/php/web-request-database.php:78 Stack trace: #0 /home/httpd/vhosts/renenyffenegger.ch/php/web-request-database.php(78): PDOStatement->execute(Array) #1 /home/httpd/vhosts/renenyffenegger.ch/php/web-request-database.php(30): insert_webrequest_('/notes/developm...', 1745014830, '18.222.227.24', 'Mozilla/5.0 App...', NULL) #2 /home/httpd/vhosts/renenyffenegger.ch/httpsdocs/notes/development/web/browser/object-model/window/fetch/asynchronous(120): insert_webrequest() #3 {main} thrown in /home/httpd/vhosts/renenyffenegger.ch/php/web-request-database.php on line 78