javascript - 通过 promise 对象实现ajax请求失败,并抛出错误

查看:162
本文介绍了javascript - 通过 promise 对象实现ajax请求失败,并抛出错误的处理方法,对大家解决问题具有一定的参考价值,需要的朋友们下面随着小编来一起学习吧!

问题描述

问 题

问题描述:想通过 promise 对象来实现 ajax数据请求

//getDate.json

{
"name":"zzz",
"age":22,
"say":"hello zzz"
}    


//demo.js    
let getJson = url =>{
    let promise = new Promise((resolve,reject) =>{
    let xhr = new XMLHttpRequest();
        xhr.open("GET",url,true);
        xhr.onreadystatechange = () =>{
        if(this.readyState !== 4){
            return;
        }
        if(this.status == 200){
            resolve(this.response);
        }else{
            reject(new Error(this.statusText))
        }
    }
    xhr.responseType = 'json';
    xhr.setRequestHeader('Accept','application/json');
    xhr.send(null);
});
    return promise;
};

getJson("getDate.json").then((json) =>{console.log(json);},(err)=>{console.log(err)});

抛出错误:(intermediate value) is not a constructor

解决方案

你代码错误有点多
1.两个new
2.this换成xhr,箭头函数this这个知识点查下吧
3.onsetRequestHeader没有这个函数,应该是setRequestHeader
4.设置格式为json不能获取responseText,必须设置responseType为text才行,另外改成response也行

贴上我改后的代码

let getJson = url =>{
    let promise = new Promise((resolve,reject) =>{
    let xhr = new  XMLHttpRequest();
        xhr.open("GET",url,true);
        xhr.onreadystatechange = () =>{
        if(xhr.readyState !== 4){
            return;
        }
        if(xhr.status == 200){
            resolve(xhr.response);
        }else{
            reject(new Error(xhr.statusText))
        }
    }
    xhr.responseType = 'json';
    xhr.setRequestHeader('Accept','application/json');
    xhr.send(null);
});
    return promise;
};

getJson("getDate.json").then((json) =>{console.log(json);},(err)=>{console.log(err)});

这篇关于javascript - 通过 promise 对象实现ajax请求失败,并抛出错误的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持IT屋!

查看全文
登录 关闭
扫码关注1秒登录
发送“验证码”获取 | 15天全站免登陆