2016-05-06 8 views
0

favColorというJSON要素を印刷しようとしています。 favColorresponse.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(); 
    }); 
} 
+3

おそらく 'response.data'は値' {"favColor": "green"} 'を持つ単なる文字列です。これをテストするために 'console.log(typeof response.data);'をログすることができます。 – wero

+0

@weroに同意すると、それを逆シリアル化する必要があるかもしれません。 – nurdyguy

+0

* "JSON要素へのアクセスは未定義です" *ここでは用語の問題もあります。 「JSON」はデータ交換形式で、XML、YAML、CSVのように基本的にテキストです。 JavaScriptでは、テキストは文字列の一部にしか存在しません(req.responseTextが返すものです)。 JSON( 'JSON.parse(...)')を含む文字列を解析すると、JavaScript値、たいていは*オブジェクト*または*配列*が返されます。その時点でJSONはもう処理されません。データへのアクセスに関する問題は、JSONではなくJavaScriptに関連しています。 –

答えて

1

はあなたの符号化データを二重にように思えます。 response.dataのコンソール出力が{"favColor":"green"}であるという事実は、それが文字列であることを証明しています(オブジェクトの場合は、Object { ... }のようになります)。

データにネストされたJSONが含まれておらず、コードが正常に動作するように、サーバー側で修正する必要があります。

+0

サーバー側でこれを修正するにはどうすればいいですか? – 123

+0

「最上位」の値をJSON(他の値ではなく、 'data'プロパティを保持するもの)としてエンコードしていることを確認してください。 *正確に*行うべきことは、あなたのコードに依存します。 –

関連する問題