XMLHttpRequest.readyState&XMLHttpRequest.status最后阶段对比
XMLHttpRequest.readyState & XMLHttpRequest.status final stage comparison
我有一个脚本,我想看看是否可以修复比较。
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() 已调用,headers 和状态可用。
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);
}
这有可能实现吗,还是我在做白日梦?
如果您希望在最后阶段根据状态执行不同的操作,则需要嵌套 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()
}
我有一个脚本,我想看看是否可以修复比较。
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() 已调用,headers 和状态可用。
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);
}
这有可能实现吗,还是我在做白日梦?
如果您希望在最后阶段根据状态执行不同的操作,则需要嵌套 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()
}