首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >E6 Ajax请求不工作

E6 Ajax请求不工作
EN

Stack Overflow用户
提问于 2017-04-07 14:13:30
回答 1查看 101关注 0票数 1

我有一个脚本,我想从端点获取一些json数据,但是我得到了一个错误,这是我的脚本:

代码语言:javascript
复制
function httpGet(url) {
    return new Promise(
        function (resolve, reject) {
            var request = new XMLHttpRequest();
            request.onreadystatechange = function () {
                if (this.status === 200) {
                    // Success
                    resolve(this.response);
                } else {
                    // Something went wrong (404 etc.)
                    reject(new Error(this.statusText));
                }
            }
            request.onerror = function () {
                reject(new Error(
                    'XMLHttpRequest Error: '+this.statusText));
            };
            request.open('GET', url);
            request.send();
        });
}

var url = 'https://api.jsonPlaceholder.com';

httpGet(url)
  .then(JSON.parse)
  .then((r) => {
    console.log(r);
  }).catch(function(error) {
    console.log(error);
  });

然后,在控制台中抛出一个错误:

错误在XMLHttpRequest.request.onreadystatechange (app.js:11)在app.js:18在承诺()在httpGet (app.js:2)在app.js:25

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2017-04-07 14:16:21

您不能只检查status,您必须先检查readyState == 4,然后才能决定发生了什么:

代码语言:javascript
复制
function httpGet(url) {
    return new Promise(
        function (resolve, reject) {
            var request = new XMLHttpRequest();
            request.onreadystatechange = function () {
                if (this.readyState === 4) {                            // ***
                    if (this.status === 200) { 
                        // Success
                        resolve(this.response);
                    } else {
                        // Something went wrong (404 etc.)
                        reject(new Error(this.statusText));
                    }
                }                                                       // ***
            }
            request.onerror = function () {
                reject(new Error(
                    'XMLHttpRequest Error: '+this.statusText));
            };
            request.open('GET', url);
            request.send();
        });
}

规格说,在请求完成之前访问this.response应该只返回一个空字符串,但是对于我使用Chromev57,这样做会给出您引用的错误。添加readyState检查会修复它。

票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/43280335

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档