API Google Books показывает только 10 результатов. Хотите выполнить итерацию startIndex так, чтобы он выполнял цикл до тех пор, пока не будут показаны все результаты

#javascript #json #ajax

#javascript #json #ajax

Вопрос:

 function bookSearch() {
  var search = document.getElementById('search').value
  document.getElementById('results').innerHTML = ""
  console.log(search)
  var startIndex =
  

Поэтому я хочу повторять вызов ajax до тех пор, пока он не покажет все элементы, а не только 10. Можно получить 40, используя maxresults параметр. Таким образом, startIndex должен меняться с 0 на 20, с 40 на 60 и так далее после каждой итерации.

 while (startIndex < 2000) {
  $.ajax({
    url: "https://www.googleapis.com/books/v1/volumes?q="   search   "amp;startIndex="   startIndex   "amp;maxResults=40",
    dataType: "json",

    success: function (data) {
      console.log(data)
      for (i = 0; i < data.items.length; i  ) {
        results.innerHTML  = "<h2>"   data.items[i].volumeInfo.title   "</h2>"
        results.innerHTML  = "<h2>"   data.items[i].volumeInfo.authors   "</h2>"
        results.innerHTML  = "<h2>"   data.items[i].volumeInfo.publishedDate   "</h2>"
      }
    },
    type: 'GET'
  });
}
}

document.getElementById('button').addEventListener('click', bookSearch, false)
  

Комментарии:

1. developers.google.com/books/docs/v1/using . Посмотрите в разделе разбивка на страницы. Если значение maxResults не указано, значение по умолчанию равно 10. Похоже, вам нужно указать maxResults, если вы хотите больше, чем значение по умолчанию.

2. вместо того, чтобы указывать его каждый раз, я хочу добавить цикл, в котором он продолжает обновляться, пока не будут показаны все результаты.

Ответ №1:

Вы можете попробовать это. Считайте total_items, пока он не достигнет более 40, и выполните цикл функции для печати результатов:

 // start

var startIndex=0;


// button clicked
$("#button").click(function(){
  $("#results").html('<img src="img/loader.gif" alt="" class="loader">');
  var searchInput = $("#search").val();
  getBooks(searchInput)
})


// onclick function run
function getBooks(search) {
  RunApi(search, startIndex);
  $("#results img").remove();
}

// run function to get results if available
function RunApi(search, start){
  $.ajax({
    url:"https://www.googleapis.com/books/v1/volumes?q="   search   "amp;maxResults=40amp;startIndex=" start,
    dataType: "json",

    success: function(data) {
      console.log(data)
      totalItems = data.totalItems;
      if(data.items){
        for(i=0; i<data.items.length; i  ){
          if(data.items[i].volumeInfo){
            var itemNubmer = startIndex i;
            results.innerHTML  = "<h2>" itemNubmer ": "   data.items[i].volumeInfo.title   "</h2>"
            // results.innerHTML  = "<h2>"   data.items[i].volumeInfo.authors   "</h2>"
            // results.innerHTML  = "<h2>"   data.items[i].volumeInfo.publishedDate   "</h2>"
          }
          
        }
      }
      // repeat the function
      if(totalItems > 40){
      startIndex =40;
      RunApi(search, startIndex);
      }
    },
    type:'GET'
  });
}