Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/javascript/405.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/ajax/6.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Javascript 如何在第二次ajax调用之外获得价值_Javascript_Ajax_Asynchronous - Fatal编程技术网

Javascript 如何在第二次ajax调用之外获得价值

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

我有两个API调用:

  • 第一个API调用获取ISBN列表

  • 第二个API调用从第一步的ISBN列表中获取每个ISBN的信息

  • 步骤1中的列表可能包含50个ISBN,但在步骤2中检查每个ISBN的信息时,如果缺少一些信息,我不想显示或计算该ISBN

    我的最终目标是用完整的信息统计我拥有的ISBN的总数,但我看不到如何检索它,因为Ajax是异步的

    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){/*最后一个*/}