簡體   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