1.找到一个公开的诗词API,尝试写了个一个js去请求,但会因为网络或者接口的原因,导致请求超时或者失败,于是想写一个判断返回然后超时或者失败重新请求的js,苦于新手,一直不知道怎么拿到返回的数据,代码如下
2.请求代码
function get(url, callback) {
var xhr = new XMLHttpRequest();
xhr.open("GET", url, true);
xhr.onreadystatechange = function () {
if (xhr.readyState == 4) {
// 判断参数
if (typeof callback === "function") {
// 百度到的,也想尝试一下apply用法
callback.apply(xhr);
}
}
};
xhr.send();
}
var finalUrl = "http://yijuzhan.com/api/word.php?m=json";
var data;
// get() 会立即执行,这个问题好像和异步同步调用有关,所以也是尝试一下
data = get(finalUrl,
// 这个时候,回调函数是在响应到达之后调用
function () {
// 这时候的this是xhr,apply();
var resp = JSON.parse(this.responseText);
// now do something with resp
console.log(resp);
//结果是{content: "一朵芙蕖,开过尚盈盈。", source: "苏轼《江神子·江景》"}
}
);
console.log(data);//结果是undefined,如何获取(data)
3.尝试
function get(url, callback) {
var xhr = new XMLHttpRequest();
xhr.open("GET", url, true);
xhr.onreadystatechange = function () {
if (xhr.readyState == 4) {
if (typeof callback === "function") {
callback.apply(xhr);
//return resp; 这是尝试
}
}
};
xhr.send();
//return resp; 这是尝试
}
尝试过在回调函数里加上return,还是undefined,百度之后,大概明白,因为XMLHttpRequest();是异步函数,直接return,返回的是响应未到达的结果,所以为undefined,
4.想问的是
1.有没有大佬指点一下,怎么才能获取resp,
2.或者XMLHttpRequest();这个对象在超时或者失败的或者返回为空的时候,有没有什么方法重新请求,看了w3c的说明,xhr.timeout =ms;可以设置超时,超过 timeout 时间请求还没有结束(包括成功/失败),则会触发ontimeout事件
但我有点死脑筋,还是想搞到resp。嘿嘿
3.虽然新手一枚,害,但大佬该骂骂。