javascriptnode.jsxmlhttprequest

How to make AJAX request in Hackerrank using JavaScript?


I open the Hackerrank example test and play around with methods one might use to make an AJAX call. XMLHttpReq, fetch, etc. None of them work; XHR and fetch methods are unavailable.

First fetch:

async function myFetch() {
  let response = await fetch('https://jsonplaceholder.typicode.com/todos/1');
  let data = await response.json();
  console.log(data);
}

Hackerrank throws an error because fetch is not a function. I also tried window.fetch and global.fetch to no avail.

I tried XHR:

function myXHR() {
  var xmlhttp = new XMLHttpRequest();
  xmlhttp.onreadystatechange = function() {
    if (this.readyState === 4 && this.status === 200) {
      console.log(this.responseText);
      // or JSON.parse(this.responseText);
    }
  };
  xmlhttp.open('GET', 'https://jsonplaceholder.typicode.com/todos/1');
  xmlhttp.send();
}

Hackerrank says XMLHttpRequest is not defined.

Hackerrank is executing Node.JS code, that explains why XHR isn't available, I have to require myself perhaps. Except I can't npm install anything, all I have access to is their little IDE.

How do you make an AJAX call in this platform with JavaScript?


Solution

  • I've passed the HackerRank REST API certification and had the same issue. HackerRank uses a NodeJs environnement to run you code (it's said in the langage selection), so neither XMLHttpRequest nor fetch are available ( as these are Browser only ).

    I suggest you use the request npm package, HackerRank allows you to require it. One downside is that request doesn't support Promises & Async/Await unless you import other packages (which HackerRank doesn't seem to recognize).

    Here's what I used :

    const request = require('request');
    
    function myFetch(url) {
      return new Promise((resolve, reject) => {
        request(url, function (error, response, body) {
          if(error) reject(error)
    
          else resolve(body)
        });
      });
    }
    

    Note : request package has been recently deprecated, but it will still work well for your use case.