Freelancer
Freelancer

Reputation: 887

Returning data from AJAX callback by javascript

Firstly, I want to confirm that this question is not duplicated with other similar questions on stackoverflow, because my question is only based on javascript, NO jquery.

I wrote website https://www.emojionline.org. Because this site is small, I don't want to use JQuery. I tried to test with Jquery to solve this problem is ok, but I only want javascript without jquery. My question is problem that return value from ajax callback function. I wrote as follows:

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

However, the json is null when I use console.log to write? What is this problem? Please help me solve it!

Upvotes: 0

Views: 1138

Answers (2)

Pedro Rodrigues
Pedro Rodrigues

Reputation: 1678

Synchronous request example:

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

Or asynchronous request example, using the Promise API and error event handler:

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

Upvotes: 1

Lưu Đạt Long
Lưu Đạt Long

Reputation: 11

xobj.open(method, url, async, user, password);

xobj.send(null);

reference: https://developer.mozilla.org/en-US/docs/Web/API/XMLHttpRequest/open

Upvotes: 0

Related Questions