Javascript 使用wikipedia API调用AJAX get时出错

Javascript 使用wikipedia API调用AJAX get时出错,javascript,json,ajax,api,get,Javascript,Json,Ajax,Api,Get,实际上,在处理FCC挑战时,我需要对WikimediaAPI进行get AJAX调用,但我正在努力解决这个问题 我首先搜索并发现我需要放置一个personnalized请求头,但我的问题仍然是,请求似乎没有被发送,因为我的eventListener on“load”在发出请求时没有被激活。我检查了我的url,它在我的浏览器中运行良好。感谢您的帮助,以下是我的代码: // ================ AJAX GENERIC FUNCTION ========================

实际上,在处理FCC挑战时,我需要对WikimediaAPI进行get AJAX调用,但我正在努力解决这个问题

我首先搜索并发现我需要放置一个personnalized请求头,但我的问题仍然是,请求似乎没有被发送,因为我的eventListener on“load”在发出请求时没有被激活。我检查了我的url,它在我的浏览器中运行良好。感谢您的帮助,以下是我的代码:

// ================ AJAX GENERIC FUNCTION =============================
function ajaxGet(url, callback) {
    let req = new XMLHttpRequest();
    req.open("GET", url);
    req.setRequestHeader( 'Api-User-Agent', 'Wiki Viewer' );
    req.addEventListener("load", function () {
        if (req.status >= 200 && req.status < 400) {
            // Call the callback function and pass it the response
            callback(req.responseText);
        } else {
            console.error(req.status + " " + req.statusText + " " + url);
        }
    });
    req.addEventListener("error", function () {
        console.error("Erreur réseau avec l'URL " + url);
    });
    req.send(null);
}
// ================ FUNCTION(S) =============================

function displayResult() {
let urlToSearch = "https://en.wikipedia.org/w/api.php?action=opensearch&search=" + searchInput.value;
  ajaxGet(urlToSearch, function (response) {
    console.log(response);
  });
}

// ================ GLOBAL VARIABLES =============================
let searchBtn = document.getElementById("searchBtn");
let searchInput = document.getElementById("searchInput");

// ================ EVENT LISTENNER =============================

searchBtn.addEventListener("click", displayResult);
/=========================AJAX通用函数=============================
函数ajaxGet(url,回调){
让req=newXMLHttpRequest();
请求打开(“获取”,url);
setRequestHeader('Api用户代理','Wiki查看器');
请求addEventListener(“加载”,函数(){
如果(请求状态>=200&请求状态<400){
//调用回调函数并将响应传递给它
回调(请求响应文本);
}否则{
控制台错误(req.status+“”+req.statusText+“”+url);
}
});
请求addEventListener(“错误”,函数(){
console.error(“Erreuréseau avec l'URL”+URL);
});
请求发送(空);
}
//===================功能=============================
函数displayResult(){
让urlToSearch=”https://en.wikipedia.org/w/api.php?action=opensearch&search=“+searchInput.value;
ajaxGet(urlToSearch,函数(响应){
控制台日志(响应);
});
}
//===================全局变量=============================
让searchBtn=document.getElementById(“searchBtn”);
让searchInput=document.getElementById(“searchInput”);
//===================事件列表器=============================
searchBtn.addEventListener(“单击”,显示结果);

尝试
onreadystatechange
而不是
addEventListener

示例代码:

req.onreadystatechange = function() {
    if (this.readyState == 4 && this.status == 200) {
      callback(this.responseText);
    }
};
.readyState
状态:

req.onreadystatechange = function() {
    if (this.readyState == 4 && this.status == 200) {
      callback(this.responseText);
    }
};
  • 0:请求未初始化
  • 1:已建立服务器连接
  • 2:收到请求
  • 3:处理请求
  • 4:请求已完成,响应已准备就绪
在你的评论之后,我尝试了你的代码来看看问题出在哪里,似乎你需要给维基百科提供更多的参数。请参见url:

&origin=*
添加到URL,它就会工作


代码运行示例:

谢谢您的回答,我现在可以说我的请求没有初始化。。。尽管如此,我还是提出了一个请求。open()!我在答案中添加了解决方案,您需要将
&origin=*
添加到URL。