2015-12-14 31 views
6

Vì vậy, tôi đang sử dụng API soundcloud để lấy mục yêu thích từ người dùng. Giới hạn tối đa của họ là 200 cho mỗi yêu cầu, tuy nhiên vào cuối đối tượng, họ có khóa a_href giá trị của ai là trang tiếp theo của mục yêu thích.Làm cách nào để lấy URL cho API nếu URL tôi muốn có trong JSON của API?

Về cơ bản, tôi đang cố gắng đặt nút để người dùng có thể nhấp vào nút và nó sẽ cho họ 200 lượt thích tiếp theo. Vấn đề của tôi là truy cập vào data.a_href mà không thực hiện nhiều cuộc gọi đến URL API ban đầu. Mã của tôi trông giống như sau:

function getAPIURL(username, subSection){ 
    apiurl = "https://api.soundcloud.com/users/" + username + "/" + subSection + "/?client_id=" + clientID + limit + "&linked_partitioning=1" 
} 


function getFavorites(){ 
    titleList.length = 0; 
    artistList.length = 0; 
    imgList.length = 0; 
    idList.length = 0; 
    $(".trackList").html(""); 
    username = $("input").val(); 
    subSection = "favorites"; 
    getAPIURL(username, subSection); 
    getAPI(apiurl); 
} 

function getAPI(apiurl){ 
    $.getJSON(apiurl, function(data) { 
     //Does some stuff then 
     $(".nextPage").on("click", function(){ 
      titleList.length = 0; 
      artistList.length = 0; 
      imgList.length = 0; 
      idList.length = 0; 
      $(".trackList").empty(); 
      getAPI(data.next_href); 
     }) 
     }); 
} 

Các công trình trên tuyệt vời khi tôi chuyển đến trang thứ hai. Tuy nhiên, khi tôi cố gắng chuyển sang phần thứ ba, nó giống như gọi cả trang thứ hai và trang đầu tiên trước khi gọi trang thứ ba ....

Bất kỳ ý tưởng nào?

+0

Mỗi lần bạn gọi 'getAPI (apiurl) ', bạn thêm một onclick vào nút trang tiếp theo. Điều gì xảy ra nếu bạn làm '$ (". NextPage "). Off ('click'). On ('click' ...'? –

+0

Điều đó hoạt động !! Bạn có thể giải thích một chút lý do tại sao đó là làm việc? Tôi đoán tôi don ' t hoàn toàn hiểu được .on ("click") Vẫn còn một JS noob lớn –

Trả lời

1

này được nộp đơn lại các nhấp chuột với mỗi cuộc gọi:

function getAPI(apiurl){ 
    $.getJSON(apiurl, function(data) { 
     //Does some stuff then 
     $(".nextPage").on("click", function(){ 
      titleList.length = 0; 
      artistList.length = 0; 
      imgList.length = 0; 
      idList.length = 0; 
      $(".trackList").empty(); 
      getAPI(data.next_href); 
     }) 
     }); 
} 

Mỗi lần nó được gọi là, số lượng các bộ xử lý nhấp chuột đi lên bằng 1 và mỗi sẽ được gọi.

Để ngừng đăng ký lại, hãy xóa nó rồi áp dụng. off() thực hiện việc xóa.

function getAPI(apiurl){ 
    $.getJSON(apiurl, function(data) { 
     //Does some stuff then 
     $(".nextPage").off("click").on("click", function(){ 
      titleList.length = 0; 
      artistList.length = 0; 
      imgList.length = 0; 
      idList.length = 0; 
      $(".trackList").empty(); 
      getAPI(data.next_href); 
     }) 
     }); 
} 

Để làm cho cuộc sống dễ dàng hơn trong tương lai, tách onclick bạn ràng buộc từ getAPI gọi.

Nếu nút không có mặt trong DOM cho đến khi một số sự kiện xảy ra, liên kết với một yếu tố phụ huynh và họ sẽ không cần off/on:

$("PARENT OF THE .nextPage BUTTON").on("click", ".nextPage", function(){ 
    ... 
}) 
+0

Cảm ơn Adrian, điều này đã giúp rất nhiều! Trên thực tế đã giúp tôi sửa chữa khá một vài lỗi khác trong chương trình.Tôi tự hỏi nếu bạn có bất cứ đề nghị cho câu hỏi này : Tôi cần phải bao gồm một nút quay lại cũng như để có được kết quả trước đó, tuy nhiên không có một khóa a_href cho giá trị trang trước đó.Là cách tốt nhất là bằng cách nào đó lưu trữ các khóa next_href cho mỗi trang? một cách thống nhất cho tôi chỉ cần điều chỉnh số trang của liên kết next_href Họ dường như có một khóa duy nhất trên mỗi trang .... –

+0

Bạn nói đúng, lưu trữ các liên kết trước đó trong một mảng và sử dụng chúng khi cần thiết. –

Các vấn đề liên quan