我有这个项目,我在HTML代码的第1行收到错误Uncaught SyntaxError: Unexpected end of input
,这是DOCTYPE标记。我不知道如何解决这个问题,因为标签没有结束标签。我只是在运行AJAX异步时遇到这个错误,我必须这样做,否则AJAX会陷入无限循环方式..我用这个来与一个能够抓住一个日历年的所有红日的API进行交互。关于如何解决这个问题的任何想法?我一直在寻找答案,但我找不到任何符合我问题的答案。
这是我的AJAX代码:
var xhr = new XMLHttpRequest();
xhr.open('GET', 'http://api.dryg.net/dagar/v2/' + year, true);
xhr.send();
var json = JSON.parse(xhr.responseText);
for (item in json.dagar) {
var propertyObject = json.dagar[item];
for (subitem in propertyObject) {
if (subitem === 'röd dag') {
var redDay = propertyObject[subitem];
if (redDay === 'Ja') {
calendar.markRedDays(propertyObject.datum);
break;
}
}
}
}
这是HTML:
<!DOCTYPE html> <--- This is where the error points to
<html lang="en">
<head>
<meta charset="UTF-8">
<title>Online Calender</title>
<script src='https://cdn.firebase.com/js/client/1.1.1/firebase.js'></script>
<link href='http://fonts.googleapis.com/css?family=Port+Lligat+Sans' rel='stylesheet' type='text/css'>
<link rel='stylesheet' type='text/css' href='style.css'>
</head>
<body>
<script src='https://ajax.googleapis.com/ajax/libs/jquery/1.11.1/jquery.min.js'></script>
<script src="firebase1.js"></script>
</body>
</html>
答案 0 :(得分:0)
似乎响应(xhr.responseText)为空,因为请求是ascynchronous(尚未收到)。
抛出该异常的方法是JSON.parse。
应该注册回调(如您问题的第一条评论中所述)以处理回复。
请注意,当reposone不是JSON时,您应该处理这种情况。例如,它可能是一个html页面,说明发生了错误。
祝你好运
答案 1 :(得分:0)
好的,事实是你需要了解AJAX的工作原理,并在评论中阅读我linked的文档。
var xhr = new XMLHttpRequest();
xhr.open('GET', 'http://api.dryg.net/dagar/v2/' + year, true);
xhr.httpRequest.onreadystatechange = callbackFunction;
xhr.send();
alert("this alert is triggered after the request was sent but before it returned")
现在请求已发送,并且最终将返回,但您的代码将继续在正常流程中运行。一旦请求返回,它将触发“onreadystatechange”事件。感谢上面添加的行,这将调用你的callbackFunction。这应该如下所示:
var callbackFunction = function(){
// This is the state when the xhr request has returned, see the docs
if (xhr.readyState === 4) {
// This means there was no error.
if (xhr.status === 200) {
//Here you can access the response of the xhr
var json = JSON.parse(xhr.responseText);
for (item in json.dagar) {
var propertyObject = json.dagar[item];
for (subitem in propertyObject) {
if (subitem === 'röd dag') {
var redDay = propertyObject[subitem];
if (redDay === 'Ja') {
calendar.markRedDays(propertyObject.datum);
break;
}
}
}
}
} else {
alert('There was a problem with the request.');
}
}
如果仍然不清楚,请查看MDN文档页面上的示例