我正在使用XMLHTTPRequest获取JSON响应。当我查看Firebug中的Response选项卡时,它会显示我已在jsonlint上验证的JSON对象。当我尝试访问该对象的属性,我得到JSON响应undefined:using XMLHttpRequest
TypeError: obj is undefined
我已经研究了好几个小时,但一直没能找到工作的解决方案。
代码:
function getState(light) {
var txt = execute('GET', 'http://' + bridge + '/api/' + hash + '/lights/' + light);
var obj = eval('(' + txt + ')');
//var obj = JSON.parse(txt);
//this gives me "SyntaxError: JSON.parse: unexpected character"
console.log(obj.name);
}
function execute($method, $url, $message) { //used for both PUT and GET requests
var xmlhttp = new XMLHttpRequest();
xmlhttp.open($method, $url, true)
xmlhttp.send($message);
console.log(xmlhttp.response);
return xmlhttp.response;
}
在Firebug的响应选项卡,则表明GET请求的响应:200个OK -4ms
{
"state": {
"on": false,
"bri": 200,
"hue": 8664,
"sat": 140,
"xy": [0.4932, 0.3832],
"ct": 428,
"alert": "none",
"effect": "none",
"colormode": "hs",
"reachable": true
},
"type": "Extended color light",
"name": "Left rear living room 1",
"modelid": "LCT001",
"swversion": "65003148",
"pointsymbol": {
"1": "none",
"2": "none",
"3": "none",
"4": "none",
"5": "none",
"6": "none",
"7": "none",
"8": "none"
}
}
当我打电话给我的getState功能(在页面加载),控制台.log声明xmlhttp.response是一个空字符串。对'txt'和'obj'做typeof返回undefined。我试图访问该对象的元素,如:
obj.name
和obj.state.on
我是新来使用JSON和XMLHttpRequest的 - 我的代码是基于模板别人了最初创建。我在我的程序的其他地方使用PUT请求没有问题,使用上面的函数,但似乎无法获得GET请求的工作。
如果我遗漏了任何重要信息,请让我知道。感谢您的任何帮助,您可以提供!
是“桥”(服务器)的相同或不同的计算机名(和港口) ? – granadaCoder
在eval('。叹息...'后停止阅读... – AlienWebguy
AJAX中的第一个A代表**异步** – Pointy