AJAX リクエストで jcarousel に新しいアイテムをロードしようとしています。さまざまな音楽トラックのリストがあり、クリック イベントでトラックの ID を渡します。
<ul id="itemTrack"> // Track items
<li><a href="#" id="p1">Track 1</a></li>
<li><a href="#" id="p2">Track 2</a></li>
<li><a href="#" id="p3">Track 3</a></li>
<ul>
<ul id="trackList"></ul> // carousel
$("#itemTrack a").bind("click", getSelectedTrack); // Click event bind on the track list
var theModelCarousel = null; // global variable assigned to null
function getSelectedTrack(e){
var el = $(e.currentTarget),
currTrack = el.attr("id"), // Track ID
apiurl = "ServiceLibrary/player/GetTrackList/" + currTrack; // URL to get data
$('#trackList').html(''); // Clear carousel list
if (theModelCarousel != null){theModelCarousel.reset();}
$('#trackList').jcarousel({
vertical : true,
scroll : 5,
initCallback: function(carousel, state){
if (state == 'init') {
theModelCarousel = carousel;
}
getListRequest(carousel, apiurl);
}
});
}
function getListRequest(carousel, apiurl){
$.ajax({
type: "GET",
url : apiurl,
dataType : 'jsonp',
timeout : 8000,
success : function(data){
if(data){
// Add/Create Items HTML
}else{
}
},
error : function(err){
// alert(err);
}
});
};
上記のコードでは、リスト項目をクリックすると、id(p1) が「apiurl」に送信され、データが取得されますが、別のリスト項目を初めてクリックすると、同じ古い ID(p1) が送信されます。 ajax呼び出しで、2回目にクリックすると正しいID(p2)が送信されます。initcallback が原因で発生することは理解できますが、「apiurl」を新しい値にクリア/リセットする解決策は得られませんでした。