问题
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?
回答1:
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.
来源:https://stackoverflow.com/questions/63631998/how-to-make-ajax-request-in-hackerrank-using-javascript