Проблемы с jQuery + get.JSON + Last.FM

Я пытаюсь настроить этот скрипт, чтобы вместо недавних треков пользователя он отображал любимые исполнители пользователя.

Это то, что я придумал, однако это не работает вообще. Я думал, что будет легко изменить атрибуты фида, но, очевидно, нет...

(function($){
$.fn.lastFM = function(options) {

var defaults = {
number: 10,
username: 'willblackmore',
apikey: '96e0589327a3f120074f74dbc8ec6443',
artSize: 'medium',
noart: 'images/noartwork.gif',
onComplete: function(){}
},
settings = $.extend({}, defaults, options);



var lastUrl = 'http://ws.audioscrobbler.com/2.0/?method=user.gettopartists&user='+settings.username+'&api_key='+settings.apikey+'+'&limit='+settings.number+'&format=json&callback=?';
var $this = $(this);

var container = $this.html();

$this.children(':first').remove();

if(settings.artSize == 'small'){imgSize = 0}
if(settings.artSize == 'medium'){imgSize = 1}
if(settings.artSize == 'large'){imgSize = 2}

this.each(function() {

$.getJSON(lastUrl, function(data){ 
 $.each(data.topartists.artist, function(i, item){

 if(item.image[1]['#text'] == ''){
  art = settings.noart;
 }else{
  art = stripslashes(item.image[imgSize]['#text']);
 }

 url = stripslashes(item.url);
 song = item.name;
 artist = item.playcount['#text'];
 album = item.streamable['#text'];

 $this.append(container);

 var $current = $this.children(':eq('+i+')');

 $current.find('[class=lfm_song]').append(song);
 $current.find('[class=lfm_artist]').append(artist);
 $current.find('[class=lfm_album]').append(album);
 $current.find('[class=lfm_art]').append("<img src='"+art+"' alt='Artwork for "+album+"'/>");
 $current.find('a').attr('href', url).attr('title', 'Listen to '+song+' on Last.FM').attr('target', '_blank');

 //callback
 if(i==(settings.number-1)){
  settings.onComplete.call(this);
 }

  });
 });
});
};

 //Clean up the URL's
 function stripslashes( str ) {  
return (str+'').replace(/\0/g, '0').replace(/\\([\\'"])/g, '$1');
}
})(jQuery);`

Любые идеи? Спасибо.


person Sean McRaghty    schedule 08.01.2010    source источник
comment
Вы хотели опубликовать свой ключ API?   -  person    schedule 26.08.2012


Ответы (1)


Вы неправильно концентрировали URL. Это действительно:

var lastUrl = 'http://ws.audioscrobbler.com/2.0/?method=user.gettopartists&user=' + settings.username + '&api_key=' + settings.apikey + '&limit=' + settings.number + '&format=json&callback=?';

Я не уверен, что это решит вашу проблему, поскольку вы не предоставили достаточно подробностей (ошибки и т. д.).

person Jan Hančič    schedule 08.01.2010
comment
И в любом случае вам не следует объединять URL-адреса. Вы должны использовать второй параметр $.getJSON, чтобы jQuery правильно экранировал ваши данные. Почти каждое использование конкатенации, которое я видел рядом с jQuery, является неправильным, и его можно избежать. - person Randal Schwartz; 08.01.2010
comment
Это решает мою проблему! Спасибо! Так что это просто, просто нужно смотреть URL. И на этом фронте ... Понятия не имею, что такое «конкатенация», но предположим, что это, например, '+settings.username+'? Чем это плохо и какой второй параметр у $.getJSON? - person Sean McRaghty; 08.01.2010
comment
Если я решил вашу проблему, вы должны принять мой ответ. Что касается вашего вопроса, задайте другой вопрос. Конкатенация означает объединение нескольких строк в одну строку (вы делаете это с помощью +) - person Jan Hančič; 08.01.2010