2017-10-12 83 views
0

实际上工作在FCC挑战,我需要做一个AJAX调用的维基媒体API,但我努力与它。AJAX上的错误获取与维基百科API调用

我第一次搜索和发现,我需要把个人化的请求标题,但我的问题保持不变,请求似乎不会发送,因为我的eventListener上的“加载”没有激活时发出请求。我检查了我的网址,它在我的浏览器中工作正常。感谢您的帮助,这里是我的代码:

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

回答

1

尝试的onreadystatechange代替addEventListener

示例代码:

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

.readyState statusses:

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

您的评论后,我试过你的代码,看看有什么问题,看来你需要给WikiPedia更多的参数。请参阅网址:https://www.mediawiki.org/wiki/API:Cross-site_requests

&origin=*添加到URL,它将起作用。你的代码运行

例子:https://jsfiddle.net/cyctreb4/

+0

谢谢您的回答,我现在可以说,我的**请求未初始化** ...虽然,我犯了一个request.open()! – Halkeand

+0

我在我的答案中添加了解决方案,您需要在URL中添加'&origin = *'。 – Boratzan