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?
Advertisement
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.