为了账号安全,请及时绑定邮箱和手机立即绑定

XMLHttpRequest.readyState & XMLHttpRequest.status

XMLHttpRequest.readyState & XMLHttpRequest.status

肥皂起泡泡 2023-01-06 16:08:20

我有一个脚本,我想看看是否可以修复比较。


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];


                if (data.type === 'exact' || data.type === 'aprox') {

                    var lyric = data.mus[0].text;


                    document.getElementById('lyric').innerHTML = lyric.replace(/\n/g, '<br />');

                    //debugging

                    console.log("Success Lyric found");

                    

                } else {

                //debugging

                    console.log("Lyric not found");

                }

            } else {

               //HERE if the condition is not met, it goes to another function

               var page = new Page();

               page.refreshLyric2(currentSong, currentArtist);

              }

        }

        xhttp.open('GET', 'https://api.vagalume.com.br/search.php?apikey=' + API_KEY + '&art=' + currentArtist + '&mus=' + currentSong.toLowerCase(), true);

        xhttp.send()

}

代码很简单,但是我想要的却无法实现。


这种比较是真实的必须经过一些先前的状态:


if (this.readyState === 4 && this.status === 200) {


XMLHttpRequest.readyState:


值状态说明


0 UNSENT 客户端已创建。open() 尚未调用。


1 OPENED 已调用 open()。


2 HEADERS_RECEIVED send() 已被调用,并且标头和状态可用。


3 LOADING 下载;responseText 保存部分数据。


4 DONE 操作完成。


XMLHttpRequest.status:


在请求完成之前,status 的值为 0。如果出现 XMLHttpRequest 错误,浏览器也会报告状态 0。

未发送:0

开业:0

加载:200

完成:200

我想做的是,如果状态的最后阶段比较分别不等于 4 和 200,则转到另一个函数。


if (this.readyState === 4 && this.status === 200) {

//run this code

.....

 } else {

//Go to another function

   var page = new Page();

   page.refreshLyric2(currentSong, currentArtist);

 }

有可能实现这一目标,还是我在做白日梦?


查看完整描述

1 回答

?
慕慕森

TA贡献1607条经验 获得超17个赞

如果您希望根据状态在最后阶段执行不同的操作,则需要嵌套if语句。首先if检测最后阶段,然后测试状态。


this.refreshLyric = function(currentSong, currentArtist) {


  var xhttp = new XMLHttpRequest();

  xhttp.onreadystatechange = function() {

    if (this.readyState == 4) {

      if (this.status == 200) {

        var data = JSON.parse(this.responseText);


        var openLyric = document.getElementsByClassName('lyrics')[0];


        if (data.type === 'exact' || data.type === 'aprox') {

          var lyric = data.mus[0].text;


          document.getElementById('lyric').innerHTML = lyric.replace(/\n/g, '<br />');

          //debugging

          console.log("Success Lyric found");


        } else {

          //debugging

          console.log("Lyric not found");

        }

      } else {

        // go to another function

        var page = new Page();

        page.refreshLyric2(currentSong, currentArtist);

      }

    }

  }

  xhttp.open('GET', 'https://api.vagalume.com.br/search.php?apikey=' + API_KEY + '&art=' + currentArtist + '&mus=' + currentSong.toLowerCase(), true);

  xhttp.send()

}


查看完整回答
反对 回复 2023-01-06
  • 1 回答
  • 0 关注
  • 10 浏览
慕课专栏
更多

添加回答

举报

0/150
提交
取消
意见反馈 帮助中心 APP下载
官方微信