我如何从外部URL解析json?

时间:2018-04-03 05:44:07

标签: javascript json

我对js比较新。我希望能够使用纯JavaScript从外部URL解析json。目前我正在使用

Content = open("file.xml").read()
From xml.etree import XML
Etree = XML(Content)
Print Etree.text, Etree.value, Etree.getchildren()
然而,这不起作用。任何人都可以帮我这个吗?谢谢!

4 个答案:

答案 0 :(得分:2)

首先,你忘了将callback函数传递给getJSON作为第二个参数,它应该被调用 当你的xhr返回数据时。 其次,当您从服务器请求JSON文件并将responseType设置为JSON时,您不需要将数据解析为json,这将自动为您完成。

var getJSON = function(url, callback) {
var xhr = new XMLHttpRequest();
xhr.open('GET', url, true);
xhr.responseType = 'json';
xhr.onload = function() {
  var status = xhr.status;
  if (status === 200) {
    callback(null, xhr.response);
  } else {
    callback(status, xhr.response);
  }
};
xhr.send();
 };


function yourCallBackFunction(err, data){
    if(err){
        //Do something with the error 
    }else{
        //data  is the json response that you recieved from the server
    }

}

 function statsget() {
 var uname = document.getElementById("nameget").value;
 var data = getJSON(`https://www.reddit.com/user/${uname}/circle.json`, yourCallBackFunction);

 }

如果您需要更多详细信息,请与我们联系。

答案 1 :(得分:0)

如果你想使用纯Javascript,那么在不编写自己的函数的情况下已经有了内置的方法:



 function statsget() {
   var uname = 'CertainPerformance';
   fetch(`https://www.reddit.com/user/${uname}/circle.json`)
     .then(res => res.json())
     .then(resJSON => {
       // interact with resJSON here
       console.log(resJSON);
     });
 }
 statsget();




与回调相比,Promise的使用效果要好得多。

答案 2 :(得分:0)

应该在statsget方法中定义回调函数。这样的事情。

function statsget() {
 var uname = document.getElementById("nameget").value;
 getJSON(`https://www.reddit.com/user/${uname}/circle.json`, 
    function(data) {
      var stats = JSON.parse(data);
      alert(data.is_betrayed);
    });
}

答案 3 :(得分:0)

由于您没有使用callback函数,因此它没有按照您期望的方式工作(即使您在getJSON函数中将其作为传递的参数)

事情是 - 这个函数假设在你得到答案后被调用。 添加这样的东西来检查

var processingData = function(status, data){
    console.log("my data is here:\n", data);
    if(status == null) { 
       return data;
    }
}

 function statsget() {
     var uname = document.getElementById("nameget").value;
     var data = getJSON(`https://www.reddit.com/user/${uname}/circle.json`, processingData);
     var stats = JSON.parse(data);
     alert(data.is_betrayed);
 }