通过javascript从AJAX回调返回数据

自由职业者

首先,我想确认这个问题没有与stackoverflow上的其他类似问题重复,因为我的问题仅基于javascript,没有jquery。

我写了网站https://www.emojionline.org因为这个网站很小,我不想用JQuery。我试图用 Jquery 测试来解决这个问题是可以的,但我只想要没有 jquery 的 javascript。我的问题是从 ajax 回调函数返回值的问题。我是这样写的:

function loadJSON(callback) {   
    var xobj = new XMLHttpRequest();
    xobj.overrideMimeType("application/json");
    xobj.open('GET', 'emoji.json', true);
    xobj.onreadystatechange = function () {
        if (xobj.readyState == 4 && xobj.status == "200") {
            callback(xobj.responseText);
        }
    };
    xobj.send(null);  
}

function returnJSON(){
    var jn = '';
    loadJSON(function(response){
        jn = JSON.parse(response);
    });
    return jn;
}

var json = returnJSON();

但是,当我使用console.log 写入时json为null?这是什么问题?请帮我解决!

佩德罗·罗德里格斯

同步请求示例:

function loadJSON(url) {
    var request = new XMLHttpRequest();

    request.overrideMimeType("application/json");
    request.open('GET', url, false);
    request.send();

    if (request.readyState === 4 && request.status === 200)
        return request.responseText;
}

// An example using ipify api (An IP Address API)
var json = loadJSON('https://api.ipify.org?format=json');
console.log(json);

或者异步请求示例,使用Promise API和错误事件处理程序:

function loadJSON(url) {
    return new Promise(function (resolve, reject) {
        var request = new XMLHttpRequest();

        request.overrideMimeType("application/json");
        request.open('GET', url, true);
        request.onreadystatechange = function () {
            if (this.readyState === 4) {
                if (this.status === 200) {
                    resolve({status: this.status, body: JSON.parse(this.responseText)});
                } else {
                    reject({status: this.status, body: this.responseText});
                }
            }
        };

        request.send();
    });
}

// An example using ipify api (An IP Address API)
loadJSON('https://api.ipify.org?format=json')
    .then(function (response) {
        console.log(response);
    })
    .catch(function (errorResponse) {
        console.log(errorResponse);
    });

本文收集自互联网,转载请注明来源。

如有侵权,请联系[email protected] 删除。

编辑于
0

我来说两句

0条评论
登录后参与评论

相关文章

来自分类Dev

AJAX回调未返回数据。

来自分类Dev

通过PHP从Json返回的回调Javascript函数

来自分类Dev

Ajax回调未返回

来自分类Dev

Ajax之后的JavaScript回调

来自分类Dev

Ajax之后的JavaScript回调

来自分类Dev

jQuery :: AJAX不返回任何回调

来自分类Dev

jQuery :: AJAX不返回任何回调

来自分类Dev

通过回调或其他方式在laravel中返回后的数据处理

来自分类Dev

通过异步回调将数据从服务返回到控制器

来自分类Dev

通过javascript函数通过ajax调用返回数据

来自分类Dev

实体返回数据时的回调

来自分类Dev

无法从 NodeJS 的回调函数返回数据

来自分类Dev

当我传递不同的对象时,为什么AJAX会将相同的数据返回给回调?

来自分类Dev

Javascript,从回调返回值

来自分类Dev

回调,JavaScript返回值

来自分类Dev

Javascript类ajax回调此

来自分类Dev

使用Ajax的JavaScript / jQuery回调

来自分类Dev

ajax请求中的Javascript回调函数

来自分类Dev

无法通过php文件中的javascript中的$ .post方法的回调函数参数发送数据

来自分类Dev

Wordpress 通过回调将 PHP 数据传递给 Javascript

来自分类Dev

JavaScript ajax,JSONP,回调函数可对数据进行处理

来自分类Dev

带数据库的Javascript回调

来自分类Dev

带数据库的Javascript回调

来自分类Dev

返回通过执行其回调参数创建的值的接口

来自分类Dev

通过一些回调无法返回对象

来自分类Dev

我的 json ajax 调用在回调中没有返回任何内容,但是网络中的数据

来自分类Dev

jQuery Ajax成功回调不触发也不返回错误

来自分类Dev

如何在ajax完成回调中返回promise?

来自分类Dev

Ajax 帖子在回调中返回错误函数