Я не нашел правильного ответа, потому что все связанные с ним вопросы использовали внешние ресурсы в примерах.очень простой getJSON не работает
У меня есть очень простой getJSON вызова (в простом файле):
<!DOCTYPE html>
<head>
<script src="//code.jquery.com/jquery-2.1.3.min.js"></script>
<script>
$(document).ready(function() {
var button = $('button');
var weatherList = $('.weather');
button.on('click', function() {
$.getJSON('weather.json', function(result) {
var elemList = $.map(result, function(city, index) {
var listItem = $('<li></li>');
$('<p>' + city.name + '</p>').appendTo(listItem);
$('<p>' + city.temp + '</p>').appendTo(listItem);
console.log('item')
return listItem;
});
weatherList.html(elemList);
});
});
});
</script>
<title>JqApp</title>
</head>
<body>
<p id="test">This paragraph is here for testing!</p>
<button>fetch</button>
<ul class="weather">
</ul>
</body>
</html>
JSON:
[
{
name: 'Prague',
temp: '23'
},
{
name: 'Hannover',
temp: '34'
}
]
Я действительно не могу понять, где может быть проблема. Я тестировал его через серверы Sinatra и Harp. Ничто не помогает. Браузер показывает успешную загрузку JSON, но он не будет отображаться на странице (возможно, JSON Object успешно загружен). Как только я перемещаю weatherList.html(elemList);
вниз, за пределами вызова JSON, можно писать на страницу, но, конечно, elemList
недоступен за пределами вызова, поэтому он не работает. Интересно, что console.log('item')
тоже не работает.
Живой пример здесь: demo
Вам не хватает точки с запятой после console.log ('item'). Основываясь на том, что вы упомянули, как насчет объявления elemList наверху /, где объявлен weatherList, чтобы вы могли получить к нему доступ за пределами вызова getJSON? –
Ваш json подделан, я думаю. использовать серверные функции для генерации данных json, поэтому у него не будет никаких скрытых символов. –