Я нашел много вопросов, похожих на мои; но ни один из ответов, которые я видел, не работал для меня. Итак, вот моя проблема. Я использую jQuery JSONP, чтобы получить довольно немного информации о некоторых книгах (JSON является статическим, поэтому он имеет жестко закодированную функцию, обернутую вокруг него). У меня это отлично работает. Моя проблема в том, что мне нужно еще несколько раз ссылаться на JSON, и с его статикой я решил, что мне нужно установить локальный массив со значениями. Так вот мой код ниже:JSONP массив undefined вне функции
function changeList(cat) {
getList(cat);
}
var bookArray = new Array();
function parseResponse(jsonData) {
$('#bookList').empty();
var items = [];
var p = '0';
$.each(jsonData, function(item, i) {
bookArray[p] = { 'bookId':i.bookId, 'category':i.category, 'publishedDate':i.publishedDate, 'title':i.title, 'description':i.description, 'images':i.images };
var allImages = i.images;
if(allImages.length > 1) {
var imageLoc = allImages.toString().split(",");
} else {
var imageLoc = new Array(allImages);
}
var theDate = new Date();
theDate.setTime(i.publishedDate * 1000);
var year = theDate.getUTCFullYear();
var month = theDate.getUTCMonth();
var day = theDate.getUTCDate();
var d = months[month] + " " + day + ", " + year;
items.push('<li><a href="/' + i.category + '/' + i.bookId + '/index.html"><img border="0" height="70" width="124" src="' + imageLoc[0] + '"><p>Published: <strong>' + d + '</strong><br /><span class="bookTitle">' + i.title + '</span> ' + i.description + '</p></a></li>');
p++;
});
$('<ul/>', {
html: items.join('')
}).appendTo('#bookList');
}
function getList(section) {
$.getJSON('http://www.otherdomain.com/book_'+ section +'.json?format=jsonp&callback=?', function(data) { });
}
Что фрагмент кода выше делает выкладывает список книг из определенного cateogry на этой странице. Существует меню слева, которое имеет категории и запускает функцию changeList() (которая, в свою очередь, запускает другие функции, чтобы нарисовать правильный json и выплюнуть их на странице). Эта часть работает безупречно!
Это приводит меня к моей проблеме, как вы можете видеть в функции parseResponse(). Я заполняю массив bookArray, который я создал. Если я ссылаюсь на этот массив внутри функции, у меня нет проблем. Однако, если я попытаюсь ссылаться на него за пределами (например, alert (bookArray [0] ['title']), я понимаю, что он не определен. Что я делаю неправильно? Я не самый высокотехнологичный человек, поэтому у вас есть использовать маленькие слова на меня Спасибо за любую помощь
EDIT Вот фрагмент, чтобы дать вам представление о том, что файл JSON выглядит следующим образом:.!
parseResponse(
[{
"bookId":"1",
"category":"A",
"publishedDate":"1266870137",
"title":"Title to first story",
"description":"The first story.",
"images":["http://www.otherdomian.com/books/fff.jpg","http://www.otherdomian.com/books/aaa.jpg"]
},{
"bookId":"2",
"category":"A",
"publishedDate":"1366870142",
"title":"Title to second story",
"description":"The second story.",
"images":["http://www.otherdomian.com/books/fff.jpg","http://www.otherdomian.com/books/aaa.jpg"]
}
])
Вы объявляете var bookArray где-нибудь? Где он используется, что он не определен. Правильно ли я говорю, что это проблема с областью переменных, а не с вашим json? –
bookArray объявлен в строке 4 моего фрагмента выше. Я еще не использовал его, чтобы проверить, что я пытался использовать оповещение, и он был неопределенным. В нижней части HTML-страницы я также попробовал document.write без везения. – Dusty
Еще один глупый вопрос от меня. Вы вызывали parseResponse, прежде чем пытаться получить доступ к содержимому bookArray? –