javascript - 通过 javascript 从 AJAX 回调返回数据

标签 javascript ajax

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

我写了网站https://www.emojionline.org 。因为这个网站很小,所以我不想使用JQuery。我尝试用Jquery测试解决这个问题是可以的,但我只想要javascript而不需要jquery。 我的问题是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为空?这是什么问题?请帮我解决一下!

最佳答案

同步请求示例:

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);
    });

关于javascript - 通过 javascript 从 AJAX 回调返回数据,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/44212154/

相关文章:

php - Websocket 或长轮询(使用 AJAX)使用 PHP 检测数据库中的更改

javascript - Php-Codeigniter : How to exit from ajax Manually . ?

php - 从其他网站剪辑图像并将其添加到我的网站

javascript - 使用 JavaScript 使用输入值隐藏和显示 div

javascript - JSON 到客户端的 ASP.NET 脚本服务的字符串?

javascript - 如何在不离开页面的情况下发送表单?

javascript - Google Charts LineChart 使用 Ajax 和 JS 在点上方永久注释

PHP cURL 获取文件,在 Javascript 中使用

javascript - FCM JS 客户端 - 提供的 applicationServerKey 无效

javascript - HTML 不呈现图表