Javascript:未捕获的语法错误:JSON输入意外结束
我正在学习javascript以及如何从API获取信息,并想做一个简单的应用程序,用户可以在其中选择一个团队,并显示有关球员的信息。当我单击搜索按钮时,我得到Javascript:未捕获的语法错误:JSON输入意外结束,javascript,Javascript,我正在学习javascript以及如何从API获取信息,并想做一个简单的应用程序,用户可以在其中选择一个团队,并显示有关球员的信息。当我单击搜索按钮时,我得到未捕获的语法错误:JSON输入的意外结束。我已经看过代码很多次了,但是我没有发现错误。否则,代码将显示我请求的信息。看起来错误正在处理中。\u player和searchPlayer Jslint显示了两个警告,但我认为它们都与问题无关: Unexpected 'for'. for(var i = 0; i < teams.len
未捕获的语法错误:JSON输入的意外结束
。我已经看过代码很多次了,但是我没有发现错误。否则,代码将显示我请求的信息。看起来错误正在处理中。\u player和searchPlayer
Jslint显示了两个警告,但我认为它们都与问题无关:
Unexpected 'for'.
for(var i = 0; i < teams.length; i++) {
Unexpected 'var'.
for(var i = 0; i < teams.length; i++) {
意外的“for”。
对于(var i=0;i
有人能解释一下我做错了什么吗
HTML代码:
<!DOCTYPE html>
<html lang="en">
<head>
<meta charset="UTF-8">
<meta name="viewport" content="width=device-width, initial-scale=1.0">
<meta http-equiv="X-UA-Compatible" content="ie=edge">
<link rel="stylesheet" href="css/style.css">
<title>Football statistic</title>
</head>
<body>
<div id="input">
<form>
<select id="myteam">
<option>Select your team</option>
</select>
<input type="button" id="search_button" value="Search">
</form>
</div>
<div id="output"></div>
<script src="js/script.js"></script>
</body>
</html>
足球统计
选择你的团队
js代码:
var teams = [];
function find_team(team_code) {
for(var i = 0; i < teams.length; i++) {
if(teams[i].code === team_code) {
return teams[i];
}
}
return undefined;
}
var process_form = function(team_code) {
var team = find_team(team_code);
var player_link = team._links.players;
player = player_link.href;
};
// write new function to process player
var process_player = function() {
var data = JSON.parse(xhttp2.response);
var item = data.players;
for (var i = 0; i<item.length; i++) {
person = item[i];
name = person.name;
value = person.marketValue;
country = person.nationality;
position = person.position;
processFormPlayer(name);
processFormPlayer(value);
processFormPlayer(country);
processFormPlayer(position);
};
}
var processFormPlayer = function(text) {
body = document.getElementById("output");
var add = document.createTextNode(text);
var paragraph = document.createElement("p");
paragraph.appendChild(add);
body.appendChild(paragraph);
}
var processXHRResponse = function() {
var data = JSON.parse(xhttp.response);
teams = data.teams;
for (var i = 0; i < teams.length; i++) {
team = teams[i];
name = team.name;
dropdownElement = document.createTextNode(name);
option = document.createElement("option");
option.value = team.code;
option.appendChild(dropdownElement);
document.getElementById("myteam").appendChild(option);
};
}
var encodeParameters = function(params) {
var strArray = [];
for(var key in params) {
if(params.hasOwnProperty(key)) {
var paramString = encodeURIComponent(key) + "/" + encodeURIComponent(params[key]);
strArray.push(paramString);
}
}
return strArray.join("&");
}
// the parameters for the API request
var parameters = {
competitions: 426,
}
// auth Token obtainable from http://api.football-data.org/register
var authToken = "2fe40f6ab37b43cca925d6fac9b05a0e";
// do the XHR request
var base_url = "http://api.football-data.org/v1/";
var query_url = base_url + encodeParameters(parameters) + "/" + "teams";
var xhttp = new XMLHttpRequest();
xhttp.addEventListener("load", processXHRResponse);
xhttp.open("GET", query_url);
xhttp.setRequestHeader("X-Auth-Token", authToken);
xhttp.send();
var doSearch = function () {
var search_term = document.getElementById("myteam").value;
process_form(search_term);
}
var searchPlayer = function() {
xhttp2 = new XMLHttpRequest();
xhttp2.addEventListener("load", process_player);
xhttp2.open("GET", player);
xhttp2.setRequestHeader("X-Auth-Token", authToken);
xhttp2.send();
process_player();
}
window.onload = function() {
var search_button = document.getElementById("search_button");
search_button.addEventListener("click", doSearch);
search_button.addEventListener("click", searchPlayer);
}
var团队=[];
功能查找团队(团队代码){
对于(var i=0;i 对于(var i=0;iaddconsole.log(xhttp.response)
在JSON.parse
之前,它说的是“未捕获的语法错误:JSON输入的意外结束”因为您要求它解析在语法有效之前结束的JSON。因为您没有向我们展示JSON,我们无法真正帮助您理解为什么。JSON.parse还会为您调用的空字符串抛出异常process\u player()
太早了。给它一个完成请求的机会!process\u player函数不是在xhttp2完成之前就运行了吗?我认为api响应仍然存在一些错误。从另一个角度看,这个错误很容易被忽略:)它工作了,没有任何错误,谢谢。很抱歉,发布了,这是非常明显的。
var searchPlayer = function() {
xhttp2 = new XMLHttpRequest();
xhttp2.addEventListener("load", process_player);
xhttp2.open("GET", player);
xhttp2.setRequestHeader("X-Auth-Token", authToken);
xhttp2.send();
//process_player();//you already attached this function as a listener
}