首先,我想确认这个问题与 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/