【问题标题】:Error on AJAX get call with wikipedia API使用维基百科 API 调用 AJAX 时出错
【发布时间】:2018-03-24 12:41:32
【问题描述】:

实际上正在处理 FCC 挑战,我需要对 wikimedia API 进行 get AJAX 调用,但我正在努力解决。

我首先搜索并发现我需要放置一个个性化的请求标头,但我的问题仍然存在,请求似乎没有发送,因为我的“加载”事件监听器在发出请求时没有激活。我检查了我的网址,它在我的浏览器中运行良好。感谢您的帮助,这是我的代码:

// ================ 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);

【问题讨论】:

    标签: javascript json ajax api get


    【解决方案1】:

    尝试onreadystatechange 而不是addEventListener

    示例代码:

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

    .readyState statusses:

    • 0:请求未初始化
    • 1:建立服务器连接
    • 2:收到请求
    • 3:处理请求
    • 4:请求已完成,响应已准备好

    在您发表评论后,我尝试了您的代码以查看问题所在,看来您需要向维基百科提供更多参数。见网址:https://www.mediawiki.org/wiki/API:Cross-site_requests

    在 URL 中添加&amp;origin=* 即可。

    您的代码运行示例:https://jsfiddle.net/cyctreb4/

    【讨论】:

    • 感谢您的回答,我现在可以说我的请求没有初始化...虽然,我提出了 request.open() !
    • 我已将解决方案添加到我的答案中,您需要在 URL 中添加&amp;origin=*
    猜你喜欢
    • 2016-04-25
    • 1970-01-01
    • 2018-01-02
    • 2015-02-12
    • 1970-01-01
    • 2013-11-13
    • 2018-05-27
    • 1970-01-01
    • 2017-01-16
    相关资源
    最近更新 更多