Javascript 未定义JSON响应:使用XMLHttpRequest
我正在使用XMLHTTPRequest获取JSON响应。当我在Firebug中查看Response选项卡时,它会向我显示JSON对象,我已经对其进行了验证。当我尝试访问对象的属性时,我得到 类型错误:obj未定义 我已经研究了几个小时,但没有找到一个有效的解决方案 代码: 在Firebug响应选项卡中,它指示GET请求的响应:200 OK-4msJavascript 未定义JSON响应:使用XMLHttpRequest,javascript,json,get,xmlhttprequest,Javascript,Json,Get,Xmlhttprequest,我正在使用XMLHTTPRequest获取JSON响应。当我在Firebug中查看Response选项卡时,它会向我显示JSON对象,我已经对其进行了验证。当我尝试访问对象的属性时,我得到 类型错误:obj未定义 我已经研究了几个小时,但没有找到一个有效的解决方案 代码: 在Firebug响应选项卡中,它指示GET请求的响应:200 OK-4ms { "state": { "on": false, "bri": 200, "hue": 8664, "sat":
{
"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函数(在pageload上)时,console.log声明xmlhttp.response是一个空字符串。在“txt”和“obj”上执行typeof返回未定义。我正在尝试访问对象元素,例如:
obj.name
和obj.state.on
我不熟悉使用JSON和XMLHttpRequest——我的代码基于其他人最初创建的模板。使用上述函数,我在程序的其他地方使用的PUT请求没有问题,但似乎无法使请求正常工作
如果我遗漏了任何重要信息,请告诉我。谢谢你能提供的任何帮助 您的XML HTTP请求被设置为异步(即,脚本不会等到收到响应并在后台执行HTTP请求时继续) 这意味着在返回之前没有足够的时间进行
xmlhttp.response
。因此,txt
未定义,因此obj
未定义,正如错误消息所述
更改xmlhttp.open
调用,使调用是同步的(即,脚本等待收到HTTP响应后再继续):
“网桥”(服务器名)是相同的还是不同的machinename(和端口)?我在
eval后停止读取(
.Sigh…AJAX中的第一个A代表asynchronous@Pointy:您是这里第一个提到AJAX的人:PI建议您阅读一篇很好的介绍。它可以澄清代码无法按预期工作的原因。请记住,在大多数情况下,同步请求通常被认为是非常糟糕的idea出于可用性原因,因为浏览器窗口将被冻结,直到请求完成。感谢您的提示!对于我的特定应用程序,我想我实际上希望浏览器等待请求完成。
{
"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"
}
}
xmlhttp.open($method, $url, false); // true => asynchronous, false => synchronous