我有两个API调用:
第一次API调用会获取ISBN列表。
第二个API调用从第一步中的ISBN列表中获取每个ISBN的信息。
步骤1中的列表可能包含50个ISBN,但是在步骤2中检查每个ISBN的信息时,如果缺少某些信息,我不想显示或计算该ISBN。
我的最终目标是使用完整的信息来统计我拥有的ISBN总数,但是由于Ajax是异步的,所以我看不到要检索的ISBN。
let request = new XMLHttpRequest();
request.open("GET",requestHTML,true)
request.send();
request.onload = parseXML;
function parseXML(){
const xmlText = request.responseText;
const parser = new DOMParser();
const xmlDoc = parser.parseFromString(xmlText,"text/xml");
var isbns = xmlDoc.getElementsByTagName("isbn");
let counter = 0;
for(isbn of isbns){
let isbnString = isbn.textContent;
let isbnURL = `https://openlibrary.org/api/books?jscmd=data&format=json&bibkeys=ISBN:${isbnString}`;
$.ajax({
type: 'GET',
url: isbnURL,
dataType: 'json',
success: function(result){
...
if(hasAllInfo){
$("#content_container").append(`<div class="book_container" id="${bookid}">`);
...
}
counter ++;
},
error: function(){
console.log('ERROR');
}
})
}
}
console.log("Total books found with all information:" + counter);
我希望最后一行显示找到的包含所有信息的ISBN总数,但我却得到0
答案 0 :(得分:1)
已经非常接近了,您只需要将console.log
拉入要递增counter
的步骤中即可。
let request = new XMLHttpRequest();
request.open("GET",requestHTML,true)
request.send();
request.onload = parseXML;
function parseXML(){
const xmlText = request.responseText;
const parser = new DOMParser();
const xmlDoc = parser.parseFromString(xmlText,"text/xml");
var isbns = xmlDoc.getElementsByTagName("isbn");
let counter = 0;
for(isbn of isbns){
let isbnString = isbn.textContent;
let isbnURL = `https://openlibrary.org/api/books?jscmd=data&format=json&bibkeys=ISBN:${isbnString}`;
$.ajax({
type: 'GET',
url: isbnURL,
dataType: 'json',
success: function(result){
...
if(hasAllInfo){
$("#content_container").append(`<div class="book_container" id="${bookid}">`);
...
}
// changes here
if(++counter === isbns.length){
console.log("Total books found with all information:" + counter);
}
},
error: function(){
console.log('ERROR');
}
})
}
}