Javascript 如何在第二次ajax调用之外获得价值
我有两个API调用:Javascript 如何在第二次ajax调用之外获得价值,javascript,ajax,asynchronous,Javascript,Ajax,Asynchronous,我有两个API调用: 第一个API调用获取ISBN列表 第二个API调用从第一步的ISBN列表中获取每个ISBN的信息 步骤1中的列表可能包含50个ISBN,但在步骤2中检查每个ISBN的信息时,如果缺少一些信息,我不想显示或计算该ISBN 我的最终目标是用完整的信息统计我拥有的ISBN的总数,但我看不到如何检索它,因为Ajax是异步的 let request = new XMLHttpRequest(); request.open("GET",requestHTML,true) request
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);
let request=new-XMLHttpRequest();
open(“GET”、requestHTML、true)
request.send();
request.onload=parseXML;
函数parseXML(){
const xmlText=request.responseText;
const parser=new DOMParser();
const xmlDoc=parser.parseFromString(xmlText,“text/xml”);
var isbns=xmlDoc.getElementsByTagName(“isbn”);
设计数器=0;
用于(isbn中的isbn){
让isbnString=isbn.textContent;
让isbnURL=`https://openlibrary.org/api/books?jscmd=data&format=json&bibkeys=ISBN:${isbnString}`;
$.ajax({
键入:“GET”,
url:isbnURL,
数据类型:“json”,
成功:功能(结果){
...
如果(hasAllInfo){
$(“#内容_容器”).append(``);
...
}
计数器++;
},
错误:函数(){
console.log('ERROR');
}
})
}
}
console.log(“找到的包含所有信息的书籍总数:“+计数器”);
我希望最后一行显示找到的ISBN总量,其中包含所有信息,但我得到的结果是0,这非常接近,您只需将
控制台拉入即可。将记录到递增计数器的步骤中
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');
}
})
}
}
let request=new-XMLHttpRequest();
open(“GET”、requestHTML、true)
request.send();
request.onload=parseXML;
函数parseXML(){
const xmlText=request.responseText;
const parser=new DOMParser();
const xmlDoc=parser.parseFromString(xmlText,“text/xml”);
var isbns=xmlDoc.getElementsByTagName(“isbn”);
设计数器=0;
用于(isbn中的isbn){
让isbnString=isbn.textContent;
让isbnURL=`https://openlibrary.org/api/books?jscmd=data&format=json&bibkeys=ISBN:${isbnString}`;
$.ajax({
键入:“GET”,
url:isbnURL,
数据类型:“json”,
成功:功能(结果){
...
如果(hasAllInfo){
$(“#内容_容器”).append(``);
...
}
//这里的变化
如果(++计数器===isbns.length){
console.log(“找到的包含所有信息的书籍总数:“+计数器”);
}
},
错误:函数(){
console.log('ERROR');
}
})
}
}
得到0正是因为javascript是异步的。您应该在完成步骤2中的所有调用后显示该信息。AJAX是异步的,因此您必须在成功后执行所有操作。counter++;如果(计数器===isbns.length){/*最后一个*/}