0

XMLHTTPRequest を使用して JSON 応答を取得しています。Firebug で [応答] タブを表示すると、jsonlintで検証した JSON オブジェクトが表示されます。オブジェクトのプロパティにアクセスしようとすると、

TypeError: obj は未定義です

数時間調査しましたが、有効な解決策を見つけることができませんでした。

コード:

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 Response タブでは、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 関数を呼び出すと、console.log は xmlhttp.response が空の文字列であると主張します。'txt' と 'obj' に対して typeof を実行すると、undefined が返されます。次のようなオブジェクト要素にアクセスしようとしています。

obj.nameobj.state.on

JSON と XMLHttpRequest を使用するのは初めてです。私のコードは、他の誰かが最初に作成したテンプレートに基づいています。上記の関数を使用して、プログラムの他の場所で使用した PUT 要求には問題はありませんが、GET 要求を機能させることができないようです。

重要な情報を忘れていたら教えてください。ご協力いただきありがとうございます。

4

1 に答える 1