favColor
というJSON要素を印刷しようとしています。 favColor
はresponse.data
に含まれていますが、何らかの理由でresponse.data.favColor
を使用してアクセスできません。私はコンソールにresponse.data
を印刷する場合JSON要素へのアクセスが未定義の場合
、私は次の取得:
{"favColor":"green"}
しかし、response.data.favColor
戻りundefined
。
マイ形式:
<form>
<label>Favorite Color: </label>
<br>
<input id="favColor" name="favColor" type="text">
<input type="submit" value="Submit POST Data" id="submitPost">
</form>
<br>
<div>
<label>Favorite Color:</label>
<div id=returnedFavColor></div>
</div>
マイスクリプト:
document.addEventListener('DOMContentLoaded', post);
function post() {
document.getElementById('submitPost').addEventListener('click', function(event) {
var req = new XMLHttpRequest();
var payload = {favColor: null};
payload.favColor = document.getElementById('favColor').value;
req.open("POST", "https://httpbin.org/post", true);
req.setRequestHeader('Content-Type', 'application/json');
req.addEventListener('load',function(){
if(req.status >= 200 && req.status < 400){
var response = JSON.parse(req.responseText);
console.log(response.data);
document.getElementById('favColor').textContent = response.data.favColor;
} else {
console.log("Error in network request: " + request.statusText);
}
});
req.send(JSON.stringify(payload));
event.preventDefault();
});
}
おそらく 'response.data'は値' {"favColor": "green"} 'を持つ単なる文字列です。これをテストするために 'console.log(typeof response.data);'をログすることができます。 – wero
@weroに同意すると、それを逆シリアル化する必要があるかもしれません。 – nurdyguy
* "JSON要素へのアクセスは未定義です" *ここでは用語の問題もあります。 「JSON」はデータ交換形式で、XML、YAML、CSVのように基本的にテキストです。 JavaScriptでは、テキストは文字列の一部にしか存在しません(req.responseTextが返すものです)。 JSON( 'JSON.parse(...)')を含む文字列を解析すると、JavaScript値、たいていは*オブジェクト*または*配列*が返されます。その時点でJSONはもう処理されません。データへのアクセスに関する問題は、JSONではなくJavaScriptに関連しています。 –