How to make AJAX request in Hackerrank using JavaScript?

Tags: , ,



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?

Answer

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.



Source: stackoverflow