dusttaker 2020-04-20 16:39 采纳率: 0%
浏览 538

XMLHttpRequest获取响应之后,怎么在函数外调用响应的内容呀,求大佬解答一下

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.虽然新手一枚,害,但大佬该骂骂。

  • 写回答

3条回答

  • 简_洋 2020-04-20 17:07
    关注

    你把你的 xhr.open("GET", url, true); 最后一个参数改成false试试,改为false这个请求应该就是同步的了,就会代码依次执行了,把你里面的return加上,

    评论

报告相同问题?

悬赏问题

  • ¥30 这是哪个作者做的宝宝起名网站
  • ¥60 版本过低apk如何修改可以兼容新的安卓系统
  • ¥25 由IPR导致的DRIVER_POWER_STATE_FAILURE蓝屏
  • ¥50 有数据,怎么建立模型求影响全要素生产率的因素
  • ¥50 有数据,怎么用matlab求全要素生产率
  • ¥15 TI的insta-spin例程
  • ¥15 完成下列问题完成下列问题
  • ¥15 C#算法问题, 不知道怎么处理这个数据的转换
  • ¥15 YoloV5 第三方库的版本对照问题
  • ¥15 请完成下列相关问题!