Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/json/15.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Javascript 未定义JSON响应:使用XMLHttpRequest_Javascript_Json_Get_Xmlhttprequest - Fatal编程技术网

Javascript 未定义JSON响应:使用XMLHttpRequest

Javascript 未定义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":

我正在使用XMLHTTPRequest获取JSON响应。当我在Firebug中查看Response选项卡时,它会向我显示JSON对象,我已经对其进行了验证。当我尝试访问对象的属性时,我得到

类型错误:obj未定义

我已经研究了几个小时,但没有找到一个有效的解决方案

代码:

在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函数(在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