Skip welcome & menu and move to editor
Welcome to JS Bin
Load cached copy from
 
<select>
  <option selected hidden> -- select ID -- </option>
  <option value="1">1</option>
  <option value="2">2</option>
  <option value="3">3</option>
</select>
<div id="result"></div>
 
const select = document.querySelector('select');
const result = document.getElementById('result');
let request;
let isFetching = false;
const render = post => {
  result.innerHTML = post.title;
};
const fetchPost = id => {
  return new Promise(resolve => {
    request = new XMLHttpRequest();
    request.responseType = 'json';
    request.open('GET', `https://jsonplaceholder.typicode.com/posts/${id}`, true);
    request.onload = () => {
      if (request.readyState === XMLHttpRequest.DONE && request.status === 200) {
        resolve(request.response);
      }
    };
    request.send(null);
  });
};
select.addEventListener('change', e => {
  if (isFetching) {
    request.abort();
  } else {
    isFetching = true;
  }
  fetchPost(e.target.value).then(res => {
    isFetching = false;
    render(res);
  });
});
Output

This bin was created anonymously and its free preview time has expired (learn why). — Get a free unrestricted account

Dismiss x
public
Bin info
anonymouspro
0viewers