如何使用 JavaScript 在 Hackerrank 中发出 AJAX 请求?

问题描述 投票:0回答:6

我打开 Hackerrank 示例测试并尝试使用可能用于进行 AJAX 调用的方法。

XMLHttpReq
fetch
等。它们都不起作用;
XHR
fetch
方法不可用。

首先

fetch

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

Hackerrank 会抛出错误,因为

fetch
不是函数。我也尝试了
window.fetch
global.fetch
,但没有成功。

我试过了

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 说

XMLHttpRequest
未定义。

Hackerrank 正在执行 Node.JS 代码,这解释了为什么

XHR
不可用,也许我必须要求自己。除了我不能
npm install
任何东西,我所能访问的只是他们的小IDE。

如何在这个平台上使用 JavaScript 进行 AJAX 调用?

javascript node.js xmlhttprequest
6个回答
24
投票

我已经通过了 HackerRank REST API 认证,并且遇到了同样的问题。 HackerRank 使用 NodeJs 环境来运行代码(在语言选择中提到),因此 XMLHttpRequest 和 fetch 都不可用(因为这些仅适用于浏览器)。

我建议你使用

request
npm 包,HackerRank 允许你要求它。 一个缺点是请求不支持 Promises 和 Async/Await,除非您导入其他包(HackerRank 似乎无法识别)。

这是我用过的:

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)
    });
  });
}

注意:请求包最近已被弃用,但它仍然适合您的用例。


4
投票

我最近在 HackerRank 中进行了测试,我使用了 http/https 的 Node.js 本机模块从 API 获取数据。因为您可以使用它而不需要任何外部库。

此外,如果您需要创建 Promise,您可以在 https 实现上创建您自己的包装。

尝试使用这个:

async function fetchData(url) {
    const https = require('https');
    return new Promise((resolve, reject) => {
        https.get(url, (response) => {
            let data = '';

            response.on('data', (stream) => {
                data += stream;
            })

            response.on('end', () => {
                const resolvedData = JSON.parse(data);
                resolve(data);
            })
        }).on('error', (err) => {
            reject(err);
        })
    });
}

async function showData() {
    const data = await fetchData('https://jsonmock.hackerrank.com/api/movies?Year=2000');
    console.log(data);
}

showData();

这可以解决您在 HackerRank 中的问题。此示例仅针对 get 请求给出。对于所有其他方法,请尝试使用 https

Node.js
模块中的
options


3
投票

Hackerrank 目前使用 axios 附带的节点版本 14.x.xx。 您所要做的就是滚动到顶部并导入或需要 axios,然后您可以根据情况使用

axios.get()
axios.post()


1
投票
  • Hackerrank 目前使用 Axios 附带的节点版本 14.x.xx

获取呼叫示例:
a)

const axios = require('axios');

b)
let response = await axios.get('URL here');

以同样的方式,您可以使用所有HTTP方法。


1
投票
let url = 'https://someurl.com/api/article_users?username=username';
const https = require('https');

https.get(url, (res) => {
console.log('statusCode:', res.statusCode);
console.log('headers:', res.headers);

res.on('data', (d) => {
    process.stdout.write(d);
});

}).on('error', (e) => {
console.error(e);
});

这对我有用。


0
投票

刚刚在 HackerRank 中进行了其余测试,并尝试了:

const fetch = require('node-fetch');

而且它也有效。提供与您习惯的相同的获取界面。

© www.soinside.com 2019 - 2024. All rights reserved.