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.name
とobj.state.on
JSON と XMLHttpRequest を使用するのは初めてです。私のコードは、他の誰かが最初に作成したテンプレートに基づいています。上記の関数を使用して、プログラムの他の場所で使用した PUT 要求には問題はありませんが、GET 要求を機能させることができないようです。
重要な情報を忘れていたら教えてください。ご協力いただきありがとうございます。