У меня есть следующий HTML-код в файле test.html
. Как файл HTML, так и файл JSON ниже хранятся на сервере в одном каталоге.
<!DOCTYPE html>
<html>
<head>
<title>Shape Up</title>
<meta name="robots" content="noindex,follow">
<meta name="description" content="">
<meta name="keywords" content="">
<meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
<script language="JavaScript" type="text/javascript">
function ajax_get_json()
{
var hr = new XMLHttpRequest();
hr.open("GET", "game.json", true);
hr.setRequestHeader("Content-type", "application/json", true);
hr.onreadystatechange = function()
{
if(hr.readyState == 4 && hr.status == 200)
{
var data = JSON.parse(hr.responseText);
var results = document.getElementById("results");
results.innerHTML = "";
for(var obj in data)
{
results.innerHTML += data[obj].title;
}
}
}
hr.send(null);
results.innerHTML = "requesting...";
}
</script>
</head>
<body>
<div id="results"></div>
<script language="JavaScript" type="text/javascript">
ajax_get_json();
</script>
</body>
</html>
Он извлекает данные из файла с именем game.json
который хранится в том же каталоге.
{
"level_001":
{
"id":001,
"title":"Level 1",
"difficulty":0,
"comments":"this is how you complete level 1"
},
"level_002":
{
"id":002,
"title":"Level 2",
"difficulty":0,
"comments":"this is how you complete level 2"
}
}
Проблема в том, что results.innerHTML = "";
линия никогда не достигается. Зачем?
В браузере ошибок нет, я проверил это на Firefox и Safari.
Согласно jsonlint.com, ваш JSON недействителен из-за этих свойств:
"id":001
...
"id":002
Вам нужно либо удалить ведущие нули:
"id":1
или введите номера строк:
"id":"001"
Для получения дополнительной информации см. Правила формата, указанные в json.org
Предположительно, указанная вами линия никогда не была достигнута, потому что JSON.parse()
дает сообщение об ошибке выше. (Вы не видите ошибку в консоли браузера?)