通过 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

宝慕林4294392
浏览 583回答 1
1回答

沧海一幻觉

你代码错误有点多1.两个new2.this换成xhr,箭头函数this这个知识点查下吧3.onsetRequestHeader没有这个函数,应该是setRequestHeader4.设置格式为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)});
打开App,查看更多内容
随时随地看视频慕课网APP

相关分类

JavaScript