无法访问JSON项目

时间:2017-03-25 12:35:55

标签: javascript html json

我在处理甚至提出HTML请求方面都是完全绿色的,所以我想我的问题看起来相当简单,但我做了一些研究,但我找不到答案为什么我的代码不工作

我使用临时访问密钥向AccuWeather API发出简单请求 - 响应文本似乎很好并且可以正确显示。但是,我试图访问我的响应中的指定项目,并且每次我尝试读取它的值时,浏览器(最新稳定的Chrome)都会在控制台中返回 undefined 。以下是我制作和解析请求的脚本:

var r = new XMLHttpRequest;
    function request()
            {

                r.open("GET","http://apidev.accuweather.com/currentconditions/v1/273125.json?language=pl&apikey=hoArfRosT1215",true);
                r.send(null);
                r.onreadystatechange = pr;


            }
    function pr()
            {
                if(r.readyState == 4)
                    {
                        if(r.status==200)
                                {
                                    console.log("pr() function has been called");
                                    var myObj, myJSON, text, obj;
                                    myObj = r.responseText;
                                    obj=JSON.parse(myObj);
                                    console.log(obj.WeatherText);

                                }
                    }
            }

我认为在解析请求时我做错了,所以浏览器无法正确访问该项,但我不知道出了什么问题。在我的情况下,有人能告诉我访问某些项目的正确方法吗?

PS。通过导航到用于发出请求的地址,可以找到响应文本。

3 个答案:

答案 0 :(得分:0)

使用obj[0].WeatherText代替obj.WeatherText

function request() {
  r.open("GET", "http://apidev.accuweather.com/currentconditions/v1/273125.json?language=pl&apikey=hoArfRosT1215", true);
  r.send(null);
  r.onreadystatechange = pr;
}

function pr() {
  if (r.readyState == 4) {
    if (r.status == 200) {
      console.log("pr() function has been called");
      var myObj, myJSON, text, obj;
      myObj = r.responseText;
      obj = JSON.parse(myObj);
      console.log(obj[0].WeatherText);
    }
  }
}

可能会帮助你

答案 1 :(得分:0)

obj.WeatherText未定义是的,你需要说obj [0] .WeatherText,结果以数组形式返回....参见:



var r = new XMLHttpRequest;
    function request()
            {

                r.open("GET","http://apidev.accuweather.com/currentconditions/v1/273125.json?language=pl&apikey=hoArfRosT1215",true);
                r.send(null);
                r.onreadystatechange = pr;


            }
    function pr()
            {
                if(r.readyState == 4)
                    {
                        if(r.status==200)
                                {
                                    console.log("pr() function has been called");
                                    var myObj, myJSON, text, obj;
                                    myObj = r.responseText;
                                    obj=JSON.parse(myObj);
                                    console.log(obj);
                                     console.log(obj[0].WeatherText);
                                    console.log(obj.WeatherText);

                                }
                    }
            }
            
            request();




答案 2 :(得分:0)

问题是,天气会发回数组的数据结构。因此,您需要访问obj [index] .WeatherText作为其值。即使您知道总会有一个答案,最好添加一个长度检查。下面是更新的代码,其中包含一些html以帮助测试它。

var r = new XMLHttpRequest;
function request()
            {

                r.open("GET","http://apidev.accuweather.com/currentconditions/v1/273125.json?language=pl&apikey=hoArfRosT1215",true);
                r.send(null);
                r.onreadystatechange = pr;


            }
    function pr()
            {
                if(r.readyState == 4)
                    {
                        if(r.status==200)
                                {
                                    console.log("pr() function has been called");
                                    
                                    var myObj, myJSON, text, obj;
                                    myObj = r.responseText;
                                    obj=JSON.parse(myObj);
                                    if(obj.length > 0){
                                      for (i = 0; i < obj.length; i++) { 
    console.log('Weather text = ' + obj[i].WeatherText);
}  
                                    }
                                    

                                }
                    }
            }
<button onclick='request()'>Click me</button>