JSON APIs and Ajax: Post Data solution does not display message

Tell us what’s happening:
The solution passes all the tests, but does not actually work. By that I mean: when I type a name into the input field and click “send message” it does not change the message being displayed in the message box above.

I’m not too worried about it, as I am able to move on and assume this is a bug, but am curious what could be going on.

Your code so far


<script>
document.addEventListener('DOMContentLoaded', function(){
  document.getElementById('sendMessage').onclick = function(){

    const userName = document.getElementById('name').value;
    const url = 'https://jsonplaceholder.typicode.com/posts';
    // Add your code below this line
const xhr = new XMLHttpRequest();
xhr.open('POST', url, true);
xhr.setRequestHeader('Content-Type', 'application/json; charset=UTF-8');
xhr.onreadystatechange = function () {
if (xhr.readyState === 4 && xhr.status === 201){
  const serverResponse = JSON.parse(xhr.response);
  document.getElementsByClassName('message')[0].textContent = serverResponse.userName + serverResponse.suffix;
}
};
const body = JSON.stringify({ userName: userName, suffix: ' loves cats!' });
xhr.send(body);

    // Add your code above this line
  };
});
</script>

<style>
body {
  text-align: center;
  font-family: "Helvetica", sans-serif;
}
h1 {
  font-size: 2em;
  font-weight: bold;
}
.box {
  border-radius: 5px;
  background-color: #eee;
  padding: 20px 5px;
}
button {
  color: white;
  background-color: #4791d0;
  border-radius: 5px;
  border: 1px solid #4791d0;
  padding: 5px 10px 8px 10px;
}
button:hover {
  background-color: #0F5897;
  border: 1px solid #0F5897;
}
</style>

<h1>Cat Friends</h1>
<p class="message box">
Reply from Server will be here
</p>
<p>
<label for="name">Your name:
  <input type="text" id="name"/>
</label>
<button id="sendMessage">
  Send Message
</button>
</p>

Your browser information:

User Agent is: Mozilla/5.0 (Macintosh; Intel Mac OS X 10_15_4) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/80.0.3987.163 Safari/537.36.

Challenge: Post Data with the JavaScript XMLHttpRequest Method

Link to the challenge:

Try printing the values of xhr.readyState and xhr.status to the console to see if their statuses are different

Thanks, I got it to work! I think maybe I was just not waiting long enough for the response the first time because I didn’t end up doing anything differently.