[英]How to make AJAX request in Hackerrank using JavaScript?
我打開了 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
不是 function。我也試過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?
我已經通過了 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.js
的https
模塊中的選項。
Hackerrank 目前使用 axios 附帶的節點版本14.x.xx。 您所要做的就是滾動到頂部並導入或需要 axios,然后您可以根據情況使用axios.get()
或axios.post()
。
獲取調用示例:
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.