首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >JavaScript有助于使用条件语法

JavaScript有助于使用条件语法
EN

Stack Overflow用户
提问于 2020-07-15 01:55:10
回答 1查看 92关注 0票数 0

我有一个函数调用API (让我们称之为API-1)来获得歌词。由于这个API有时无法在它的数据库中找到一首歌,所以我想调用另一个API (让我们称之为API-2)来执行相同的搜索。

当第一个API没有得到数据时,我需要在函数中集成两个API的代码。

我告诉你一些非常重要的信息:

API-1中,我必须强制将数据作为XML来获取,而responseType必须是'document‘。

API-2不需要任何上述条件,数据被解析为JSON,它支持的responseType是“text”,但不要求设置它,使用“document”它不能工作,它会产生错误。

现在,我将共享API-1的函数代码,然后我将共享API-2的相同函数代码。

如果我独立测试的话,----它们都工作得很完美。

我所要求的帮助是在API-1不获取数据时集成API-2 .

使用API-1的代码

代码语言:javascript
运行
复制
this.refreshLyric = function (currentSong, currentArtist) {
        var xhr = new XMLHttpRequest;
        xhr.open('GET', proxy_URL + api_URL + 'apiv1.asmx/SearchLyricDirect?artist=' + currentArtistE + '&song=' + ucwords(currentSongE), true);

        // ONLY FOR THIS XMLHttpRequest responseType must be empty string or 'document'
        xhr.responseType = 'document';

        // ONLY FOR THIS XMLHttpRequest force the response to be parsed as XML
        xhr.overrideMimeType('text/xml');

        xhr.onload = function () {
          if (xhr.readyState === xhr.DONE && xhr.status === 200) {
                                
                var openLyric = document.getElementsByClassName('lyrics')[0];
                var lyric = xhr.responseXML.getElementsByTagName('Lyric')[0].innerHTML;
                        
                //check if any data was obtained    
                if (lyric != '') {
                    document.getElementById('lyric').innerHTML = lyric.replace(/\n/g, '<br />');
                    openLyric.style.opacity = "1";
                    openLyric.setAttribute('data-toggle', 'modal');
                } else { /////// HERE INTEGRATE  API-2 //////
                    openLyric.style.opacity = "0.3";
                    openLyric.removeAttribute('data-toggle');

                    var modalLyric = document.getElementById('modalLyrics');
                    modalLyric.style.display = "none";
                    modalLyric.setAttribute('aria-hidden', 'true');
                    (document.getElementsByClassName('modal-backdrop')[0]) ? document.getElementsByClassName('modal-backdrop')[0].remove(): '';
                }
            } else {
                document.getElementsByClassName('lyrics')[0].style.opacity = "0.3";
                document.getElementsByClassName('lyrics')[0].removeAttribute('data-toggle');
            }
        };
        xhr.send();
    }

使用API-2相同的代码。

代码语言:javascript
运行
复制
this.refreshLyric = function (currentSong, currentArtist) {
        var xhttp = new XMLHttpRequest();
        xhttp.onreadystatechange = function () {
            if (this.readyState === 4 && this.status === 200) {
                var data = JSON.parse(this.responseText);

                var openLyric = document.getElementsByClassName('lyrics')[0];
                var lyric = data.mus[0].text;
                
                //check if any data was obtained
                if (lyric != '') {
                    document.getElementById('lyric').innerHTML = lyric.replace(/\n/g, '<br />');
                    openLyric.style.opacity = "1";
                    openLyric.setAttribute('data-toggle', 'modal');
                } else {
                    openLyric.style.opacity = "0.3";
                    openLyric.removeAttribute('data-toggle');

                    var modalLyric = document.getElementById('modalLyrics');
                    modalLyric.style.display = "none";
                    modalLyric.setAttribute('aria-hidden', 'true');
                    (document.getElementsByClassName('modal-backdrop')[0]) ? document.getElementsByClassName('modal-backdrop')[0].remove(): '';
                }
            } else {
                document.getElementsByClassName('lyrics')[0].style.opacity = "0.3";
                document.getElementsByClassName('lyrics')[0].removeAttribute('data-toggle');
            }
        }
        xhttp.open('GET', 'https://api.vagalume.com.br/search.php?apikey=' + API_KEY + '&art=' + currentArtist + '&mus=' + currentSong.toLowerCase(), true);
        xhttp.send()
    }

共享代码具有相同的功能(this.refreshLyric),需要集成的只是XMLHttpRequest API。

在API-1第23行的其他部分,我必须集成API-2的代码。

我已经尝试过几种方法,但是我遇到了语法问题,比如IF -否则条件词,以及API-2的错误,后者得到的是API-1的responseType和MimeType。

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2020-07-15 20:05:22

编辑

固定:当API-1找不到歌词时,我创建了一个调用API-2的新函数。refreshLyric2(currentSong, currentArtist); :)

代码语言:javascript
运行
复制
    this.refreshLyric = function (currentSong, currentArtist) {
                
                var xhr = new XMLHttpRequest;
                xhr.open('GET', proxy_URL + api_URL + 'apiv1.asmx/SearchLyricDirect?artist=' + currentArtistE + '&song=' + ucwords(currentSongE), true);
        
                // ONLY FOR THIS XMLHttpRequest responseType must be empty string or 'document'
                xhr.responseType = 'document';
        
                // ONLY FOR THIS XMLHttpRequest force the response to be parsed as XML
                xhr.overrideMimeType('text/xml');
        
                xhr.onload = function () {
                  if (xhr.readyState === xhr.DONE && xhr.status === 200) {
                                        
                        var openLyric = document.getElementsByClassName('lyrics')[0];
                        var lyric = xhr.responseXML.getElementsByTagName('Lyric')[0].innerHTML;
                                
                        //check if any data was obtained    
                        if (lyric != '') {
                            document.getElementById('lyric').innerHTML = lyric.replace(/\n/g, '<br />');
                            openLyric.style.opacity = "1";
                            openLyric.setAttribute('data-toggle', 'modal');
                        } else {
                            //If lyric was not obtained, we call API-2
                            refreshLyric2(currentSong, currentArtist);
                        }
                    } else {
                        document.getElementsByClassName('lyrics')[0].style.opacity = "0.3";
                        document.getElementsByClassName('lyrics')[0].removeAttribute('data-toggle');
                    }
                };
                xhr.send();
}
            
                refreshLyric2 = function (currentSong, currentArtist) {
                    
                var xhttp = new XMLHttpRequest();
                xhttp.onreadystatechange = function () {
                    if (this.readyState === 4 && this.status === 200) {
                        var data = JSON.parse(this.responseText);
        
                        var openLyric = document.getElementsByClassName('lyrics')[0];
                        var lyric = data.mus[0].text;
                        
                        //check if any data was obtained
                        if (lyric != '') {
                            document.getElementById('lyric').innerHTML = lyric.replace(/\n/g, '<br />');
                            openLyric.style.opacity = "1";
                            openLyric.setAttribute('data-toggle', 'modal');
                        } else {
                            openLyric.style.opacity = "0.3";
                            openLyric.removeAttribute('data-toggle');
        
                            var modalLyric = document.getElementById('modalLyrics');
                            modalLyric.style.display = "none";
                            modalLyric.setAttribute('aria-hidden', 'true');
                            (document.getElementsByClassName('modal-backdrop')[0]) ? document.getElementsByClassName('modal-backdrop')[0].remove(): '';
                        }
                    } else {
                        document.getElementsByClassName('lyrics')[0].style.opacity = "0.3";
                        document.getElementsByClassName('lyrics')[0].removeAttribute('data-toggle');
                    }
                }
                xhttp.open('GET', 'https://api.vagalume.com.br/search.php?apikey=' + API_KEY + '&art=' + currentArtist + '&mus=' + currentSong.toLowerCase(), true);
                xhttp.send()
            }
票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/62906450

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档