119 votes

Analyse de JSON à partir de XmlHttpRequest.responseJSON

J'essaie d'analyser un peu la réponse JSON de bit.ly en javascript.

Je reçois le JSON via XmlHttpRequest.

var req = new XMLHttpRequest;  
req.overrideMimeType("application/json");  
req.open('GET', BITLY_CREATE_API + encodeURIComponent(url)
          + BITLY_API_LOGIN, true);  
var target = this;  
req.onload  = function() {target.parseJSON(req, url)};  
req.send(null);

parseJSON: function(req, url) {  
if (req.status == 200) {  
    var jsonResponse = req.responseJSON;  
    var bitlyUrl = jsonResponse.results[url].shortUrl;  
}

Je fais ça dans un module Firefox. Quand je lance je reçois l'erreur "jsonResponse is undefined" pour la ligne var bitlyUrl = jsonResponse.results[url].shortUrl;. Est-ce que je fais quelque chose de mal en analysant JSON ici ? Ou qu'est-ce qui ne va pas avec ce code ?

31voto

Londeren Points 504

Vous pouvez simplement définir xhr.responseType = 'json';

const xhr = new XMLHttpRequest();
xhr.open('GET', 'https://jsonplaceholder.typicode.com/posts/1');
xhr.responseType = 'json';
xhr.onload = function(e) {
  if (this.status == 200) {
    console.log('response', this.response); // JSON response  
  }
};
xhr.send();
  

Documentation pour responseType

2voto

YOU Points 44812

Je pense que vous devez inclure jQuery pour utiliser responseJSON.

Sans jQuery, vous pourriez essayer avec responseText et essayer comme eval("("+req.responseText+")");

UPDATE :S'il vous plaît lire le commentaire concernant eval, vous pouvez tester avec eval, mais ne l'utilisez pas dans l'extension de travail.

OU

utiliser json_parse : il n'utilise pas eval

1voto

erikvold Points 4828

Utilisez nsIJSON si c'est pour une extension FF :

var req = new XMLHttpRequest;
req.overrideMimeType("application/json");
req.open('GET', BITLY_CREATE_API + encodeURIComponent(url) + BITLY_API_LOGIN, true);
var target = this;
req.onload = function() {target.parseJSON(req, url)};
req.send(null);

parseJSON: function(req, url) {
if (req.status == 200) {
  var jsonResponse = Components.classes["@mozilla.org/dom/json;1"]
      .createInstance(Components.interfaces.nsIJSON.decode(req.responseText);
  var bitlyUrl = jsonResponse.results[url].shortUrl;
}

Pour une page Web, il suffit d'utiliser JSON.parse au lieu de Components.classes["@mozilla.org/dom/json;1"].createInstance(Components.interfaces.nsIJSON.decode

Prograide.com

Prograide est une communauté de développeurs qui cherche à élargir la connaissance de la programmation au-delà de l'anglais.
Pour cela nous avons les plus grands doutes résolus en français et vous pouvez aussi poser vos propres questions ou résoudre celles des autres.

Powered by:

X