Advertisement
AdamJS

JS fetch FormData

Feb 19th, 2022 (edited)
518
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
HTML 5 3.51 KB | None | 0 0
  1. <!DOCTYPE html>
  2. <html lang="en-US">
  3.   <head>
  4.     <meta charset="UTF-8" />
  5.     <meta name="viewport" content="width=device-width, initial-scale=1.0" />
  6.  
  7.     <style>
  8.       * {
  9.         box-sizing: border-box;
  10.       }
  11.       body {
  12.         background-color: black;
  13.       }
  14.       .container {
  15.         width: 15em;
  16.         height: 18em;
  17.         margin: 2em;
  18.         padding: 1em;
  19.         border: 2px solid gray;
  20.         border-radius: 1em;
  21.         background-image: linear-gradient(45deg, rgba(220,220,220,1) 0%, rgba(10,10,10,1) 100%);  
  22.       }
  23.       label, input, button {
  24.         display: block;
  25.         margin: 0.5em;
  26.         font: 300 1.1em/1.4 monospace;
  27.       }
  28.       input, button {
  29.         width: 12em;
  30.       }
  31.       label {
  32.         color: white;
  33.       }
  34.       button {
  35.         margin: 2em 0.5em 1em 0.5em;
  36.         height: 2em;
  37.         border-radius: 0.5em;
  38.       }
  39.       .result {
  40.         width: 6.5em;
  41.         height: 2em;
  42.         padding: 0.5em;
  43.         margin: 0 0.25em;
  44.         background-color: rgba(50,50,50,0.5);
  45.         border: 2px solid rgba(0,0,0,0);
  46.         border-radius: 0.25em;
  47.         color: yellow;
  48.         font: 700 2em/1.1 monospace;
  49.         text-align: center;
  50.       }
  51.       .result .post-data-error {
  52.         color: red;
  53.         font: 700 1em/1.05 monospace;
  54.       }
  55.     </style>
  56.   </head>
  57.   <body>
  58.  
  59.     <div class="container">
  60.       <form>
  61.         <label for="one">Input first number</label>
  62.         <input type="text" id="one" name="one" required value="20" />
  63.         <label for="two">Input second number</label>
  64.         <input type="text" id="two" name="two" required value="2022" />
  65.  
  66.         <button type="submit">Add numbers</button>
  67.       </form>
  68.  
  69.       <pre class="result"></pre>    
  70.     </div>
  71.  
  72.     <script>
  73.       let form_, button_add, pre_result;
  74.  
  75.       window.addEventListener('load', load);
  76.       function load() {
  77.         form_ = document.querySelector('form');
  78.         button_add = form_.querySelector('button');
  79.         pre_result = document.querySelector('.result');
  80.  
  81.         form_.addEventListener('submit', addNumbers);
  82.       }
  83.  
  84.       function addNumbers(e) {
  85.         // Prevent the event from submitting the form,
  86.         // no redirect or page reload
  87.         e.preventDefault();
  88.        
  89.         button_add.disabled = true;
  90.         pre_result.textContent = '';
  91.  
  92.         const formatted_data = new FormData(form_);
  93.         postData(formatted_data);
  94.       }
  95.  
  96.       async function postData(formatted_data) {
  97.         try {
  98.           // add_numbers.php => JS fetch FormData [ $_POST ]
  99.           // https://pastebin.com/1h9SCDYb
  100.           // add_numbers.php =>  JS fetch FormData [ $_SESSION ]
  101.           // https://pastebin.com/wP8MdwDr
  102.           const response = await fetch('add_numbers.php', {
  103.             method: 'POST',
  104.             body: formatted_data
  105.           });
  106.  
  107.           const data = await response.text();
  108.           if (parseInt(data))
  109.             pre_result.textContent = data;
  110.           else
  111.             throw "Returned incorrect value";
  112.         } catch(err) {
  113.           console.warn('postData:\n' + err);
  114.          
  115.           pre_result.innerHTML = '';
  116.           const span = document.createElement('SPAN');
  117.           span.className = 'post-data-error';
  118.           span.textContent = 'Error';          
  119.           pre_result.appendChild(span);
  120.         } finally {
  121.           setTimeout(_=> {
  122.             button_add.disabled = false;
  123.           }, 500);
  124.         }
  125.       }
  126.     </script>
  127.   </body>
  128. </html>
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement