Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/javascript/448.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Javascript:未捕获的语法错误:JSON输入意外结束_Javascript - Fatal编程技术网

Javascript:未捕获的语法错误:JSON输入意外结束

Javascript:未捕获的语法错误:JSON输入意外结束,javascript,Javascript,我正在学习javascript以及如何从API获取信息,并想做一个简单的应用程序,用户可以在其中选择一个团队,并显示有关球员的信息。当我单击搜索按钮时,我得到未捕获的语法错误:JSON输入的意外结束。我已经看过代码很多次了,但是我没有发现错误。否则,代码将显示我请求的信息。看起来错误正在处理中。\u player和searchPlayer Jslint显示了两个警告,但我认为它们都与问题无关: Unexpected 'for'. for(var i = 0; i < teams.len

我正在学习javascript以及如何从API获取信息,并想做一个简单的应用程序,用户可以在其中选择一个团队,并显示有关球员的信息。当我单击搜索按钮时,我得到
未捕获的语法错误: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;iadd
console.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
}