我在处理甚至提出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。通过导航到用于发出请求的地址,可以找到响应文本。
答案 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>