2017-10-20 1 views
0

J'ai un fichier à une variable comme celui-ci.Comment obtenir des données JSON et les stocker dans une variable.

var geography = [ 
        { id:"Country", header:"", width:150}, 
        { id:"Capital", header:"Capital", width:150}, 
        { id:"Falg", header:"Falg", width:150}, 
        { id:"Language", header:"Language", width:150}, 
        {id:"Population", header:"Population", width:150}, 
       ], 

Maintenant, je voulais charger ces données à partir du json. J'ai placé ces données dans le fichier JSON et en utilisant ce code.

getGeography function(){ 
     var geography; 
     var xmlhttp = new XMLHttpRequest(); 
     xmlhttp.open("GET", "data.json",true); 
    } 

Maintenant, comment stocker dans une variable et retourner cela.

+0

Utilisez [onreadystatechange] (https: // developer.mozilla.org/en-US/docs/Web/API/XMLHttpRequest/onreadystatechange) ie 'xmlhttp.onreadystatechange = function() { if (xmlhttp.readyState === XMLHttpRequest.DONE && xmlhttp.status === 200) { geography = xmlhttp.responseText; } }; ' – Satpal

Répondre

3

Il doit être lu lorsque l'état prêt de xmlhttp est 4 et l'état de réponse est 200. Vous devez analyser la réponse avec JSON.parse(). Cependant, vous ne pouvez pas renvoyer la valeur de la fonction. Parce que XMLHTTPRequest est asynchrone par défaut.

function getGeography() { 
var geography; 
var xmlhttp = new XMLHttpRequest(); 
xmlhttp.open("GET", "data.json",true); 
xmlhttp.onreadystatechange = function() { 
    if(xmlhttp.readyState === 4 && xmlhttp.status === 200) { 
    geography = JSON.parse(xmlhttp.responseText;) 
    } 
} 
} 

Au lieu de la géographie retour vous devez lire par programmation la valeur de la géographie lorsque la demande AJAX est terminée. Quelque chose comme ça (read this):

Au lieu d'écrire du code comme ceci:

function anotherFunc() { 
var geography = getGeography(); 
thenDoSomething(geography); 
} 

Ecrire comme ceci:

function anotherFunc() { 
getGeography(); 
} 
function getGeography() { 
var geography; 
var xmlhttp = new XMLHttpRequest(); 
xmlhttp.open("GET", "data.json",true); 
xmlhttp.onreadystatechange = function() { 
    if(xmlhttp.readyState === 4 && xmlhttp.status === 200) { 
    geography = JSON.parse(xmlhttp.responseText); 
    thenDoSomething(geography); 
    } 
} 
} 

Il est comme la remise du contrôle de l'exécution du reste du code getGeography(), au lieu d'attendre une valeur de retour de la fonction, puis d'utiliser cette valeur. La fonction getGeography() reprend l'exécution du reste du code avec la valeur reçue de la réponse AJAX, lorsque l'appel AJAX est terminé.

+0

Dois-je déclarer' geography' en tant que tableau? – David

+2

Non, javascript ne nécessite pas de types définis. avec 'var geography;' vous déclarez une variable et assignez une valeur 'undefined'. Vous pouvez assigner ce que vous voulez et ensuite assigner n'importe quoi d'autre. Le type sera changé automatiquement. –

+0

Dans ce cas aussi je suis gettong le statut obtient 0 au lieu de 200 – David

1

Je ne suis pas fan de jQuery mais dans ce cas, vous en bénéficieriez probablement.

$.get("ajax/test.html", function(data) { 
    // data is your result 
    console.log(data); 
    console.log(JSON.parse(data)); 
}); 

https://api.jquery.com/jquery.get/

0

Voici comment utiliser XMLHttRequest():

<script> 
    const req = new XMLHttpRequest(); 
    var geography = []; 
    req.onreadystatechange = function(event) { 
     // XMLHttpRequest.DONE === 4 
     if (this.readyState === XMLHttpRequest.DONE) { 
      if (this.status === 200) { 
       geography = JSON.parse(this.responseText); 
       console.log(geography); 
       alert("Great Success : check console !"); 
      } else { 
       alert("Something has gone really Bad !"); 
      } 
     } 
    }; 

    req.open('GET', 'data.json', true); 
    req.send(null); 

Veillez à utiliser JSON correct:

[ 
    {"id":"Country","header":"","width":150}, 
    { "id":"Capital","header":"Capital", "width":150}, 
    { "id":"Falg","header":"Falg","width":150}, 
    { "id":"Language","header":"Language", "width":150}, 
    { "id":"Population", "header":"Population", "width":150} 
] 
+0

le statut obtient 0 au lieu de 200 – David

+0

Utilisez-vous un serveur web? Vous ne devriez pas ouvrir votre fichier html localement, je veux dire via le protocole de fichier. Utilisez un serveur Web. Vous pouvez utiliser "serveur Web pour chrome" par exemple, qui est un addon de chrome. J'ai testé mon exemple avec ça et ça marche bien :-) – PhilMaGeo