0

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」を新しい値にクリア/リセットする解決策は得られませんでした。

4

1 に答える 1

2

他の今後のリクエストに reloadCallback を使用できます

initCallback: function(carousel, state){        
      if (state == 'init') {
        theModelCarousel = carousel;
        getListRequest(carousel, apiurl);
      }
},
reloadCallback: function(carousel){
      getListRequest(carousel, apiurl);
}
于 2013-01-29T04:27:35.510 に答える