-1

I am trying to get the data variable out of if-else statement in the global scope how can I do it?

let request = new XMLHttpRequest();
request.open('GET', 'API Url');
request.send();

request.addEventListener('readystatechange', function () {
    if(request.readyState === 4 && request.status === 200){
    var data = JSON.parse(request.responseText);   // Data Variable
}
});

console.log(data); //gives error
ronitgupta
  • 33
  • 5
  • Even if you fix the scope problem your code will not work. The request is *asynchronous*, so `data` will not be set until the request response is received. – Pointy Nov 29 '20 at 16:58
  • this is asynchronous code , so fixing scope wont work. you will need to put your code inside callback function – Kritish Bhattarai Nov 29 '20 at 17:01

3 Answers3

0

Move out data variable from scope.

let data = {}; 
request.addEventListener('readystatechange', function () {
    if(request.readyState === 4 && request.status === 200){
    data = JSON.parse(request.responseText);   // Data Variable
}
});

console.log(data);
tmsbrndz
  • 1,297
  • 2
  • 9
  • 23
  • 1
    This is the answer. However, it's better practice to use `let` instead of `var`. – Cooper Scott Nov 29 '20 at 16:58
  • It still won't work. – Pointy Nov 29 '20 at 17:00
  • @Pointy Correct! Do you know the solution – ronitgupta Nov 29 '20 at 17:06
  • @ronitgupta see the linked duplicate. It's an asynchronous operation, so the value will not be available until the final state change event fires. You *can't* get the value outside of that without using a Promise mechanism or `async/await` (which is based on Promises). – Pointy Nov 29 '20 at 18:34
0

You need to declare the data variable outside the function block to get it globally, currently, it is inside a functional scope

More on scopes here

let request = new XMLHttpRequest();
request.open('GET', 'API Url');
request.send();

var data = {}; // Declare here

request.addEventListener('readystatechange', function () {
    if(request.readyState === 4 && request.status === 200){
        data = JSON.parse(request.responseText);   // Data Variable
    }
});

console.log(data); //gives error
Jefferson Swartz
  • 306
  • 3
  • 10
0

Please put data out

let request = new XMLHttpRequest();
request.open('GET', 'API Url');
request.send();

let data = 'Data Variable';
request.addEventListener('readystatechange', function () {
    if(request.readyState === 4 && request.status === 200){
    data = JSON.parse(request.responseText);   // Data Variable
}
});

console.log(data);