Я нахожусь в аналогичной должности - не являющийся экспертом по javascript, работающий над забавным проектом по ознакомлению с javascript, ajax и json.
Я сделал три разных шага, чтобы решить проблему. Я приветствую любые отзывы по улучшению решения.
Первый шаг - запросить у сайта nfl результаты. Поскольку источник json, сайт nfl, отличается от вашего сайта, вам придется обойти ограничения безопасности javascript от междоменных запросов. Я нашел эту стековую ссылку хорошей ссылкой. Я использовал JSONP для обхода. Я использовал http://whateverorigin.org/ в качестве сайта косвенного обращения.
$.getJSON('http://whateverorigin.org/get?url=' + encodeURIComponent('http://www.nfl.com/liveupdate/scorestrip/scorestrip.json') + '&callback=?', handleQueryForScoresResult);
Как отмечали другие, сайт nfl возвращает неверные данные json. Следующая строка примера иллюстрирует проблему:
[ "ВС", "4:25", "Final" ,, "ТЭН", "7", "MIN", "30" ,,, "55571" ,, "REG5", "2012"]
Обратите внимание на пустые значения элементов массива (повторяющиеся запятые без данных между ними). Поэтому в моей функции обратного вызова json я исправил данные, добавив пустые строки (две двойные кавычки) к повторным запятым перед вызовом jquery для анализа данных json:
function handleQueryForScoresResult(data) {
var jsonStr = data.contents;
jsonStr = jsonStr.replace(/,,/g, ',"",');
jsonStr = jsonStr.replace(/,,/g, ',"",');
var scoresData = jQuery.parseJSON(jsonStr).ss;
.
.
.
}
Наконец, я создал объект GameScores для инкапсуляции данных json.
function GameScore(scoreData) {
this.scoreData = scoreData;
scoreData[2] = scoreData[2].toLowerCase();
scoreData[5] = parseInt(scoreData[5]);
scoreData[7] = parseInt(scoreData[7]);
}
function GameScore_getAwayTeam() { return this.scoreData[4]; }
function GameScore_getHomeTeam() { return this.scoreData[6]; }
function GameScore_isFinal() { return this.scoreData[2]=="final"; }
function GameScore_getHomeTeamScore() { return this.scoreData[7]; }
function GameScore_getAwayTeamScore() { return this.scoreData[5]; }
function GameScore_doesHomeTeamLead() { return this.scoreData[7]> this.scoreData[5]; }
function GameScore_doesAwayTeamLead() { return this.scoreData[5]> this.scoreData[7]; }
function GameScore_getWeekId() { return this.scoreData[12]; }
GameScore.prototype.getHomeTeam = GameScore_getHomeTeam;
GameScore.prototype.getAwayTeam = GameScore_getAwayTeam;
GameScore.prototype.isFinal = GameScore_isFinal;
GameScore.prototype.getHomeTeamScore = GameScore_getHomeTeamScore;
GameScore.prototype.getAwayTeamScore = GameScore_getAwayTeamScore;
GameScore.prototype.doesHomeTeamLead = GameScore_doesHomeTeamLead;
GameScore.prototype.doesAwayTeamLead = GameScore_doesAwayTeamLead;
GameScore.prototype.getWeekId = GameScore_getWeekId;
Я добавил только несколько методов доступа, поскольку мне не требовалось большинство данных. Ваши потребности могут отличаться.