繁体   English   中英

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

[英]How to make AJAX request in Hackerrank using JavaScript?

我打开了 Hackerrank 示例测试并尝试了一些可能用于拨打 AJAX 的方法。 XMLHttpReqfetch等。它们都不起作用; XHRfetch方法不可用。

首先fetch

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

Hackerrank 抛出错误,因为fetch不是 function。我也试过window.fetchglobal.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?

我已经通过了 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)
    });
  });
}

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

我最近在 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 中的问题。 此示例仅用于获取请求。 对于所有其他方法,请尝试使用Node.jshttps模块中的选项

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

  • Hackerrank 目前使用 Axios 自带的节点版本 14.x.xx

获取调用示例:
a) const axios = require('axios');
b) let response = await axios.get('URL here');

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

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

这对我有用。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM