0

応答が{"errmsg":"Error_BB"}またはであるとし{"msg":"I am BB"}ます。

var jsonparsed = JSON.parse(response);// OK, It works

var key = Object.getOwnPropertyNames(jsonparsed);// key can be msg or errmsg, OK, It works

if("errmsg" == key)
    {
        throw ("Error says:"+jsonparsed.key); //It cannot work but if jsonparsed.errmsg, it works 
    }
else
    {
        alert("Data says:"+jsonparsed.key); //It cannot work but if  jsonparsed. msg, it works
    }  

次のアラートが表示されます。

エラーは、値が未定義であることを示しています

キーが比較条件として定義されているように見えるので、なぜでしょうか。

警告メッセージをスローまたは生成できません。ただし、コメントに示されているようにキーをerrmsgまたはmsgに置き換えると機能します。

4

2 に答える 2

0

式を使用して、オブジェクトでjsonparsed.key名前が付けられたプロパティを求めています。"key"jsonparsed

名前が var 値であるキーを取得するには、配列のような表記法を使用できます。

throw ("Error says:"+jsonparsed[key]);

または eval 関数を使用します。

throw ("Error says:"+eval("jsonparsed."+key));
于 2013-08-26T08:50:48.170 に答える
0

まあ、jsonparsedプロパティはありませんkeyよね?あなたが言ったように、それはerrmsgまたはmsgを持っています。であることは驚くべきことではありませjsonparsed.keyundefined

名前が変数に含まれているプロパティにアクセスする場合は、ブラケット表記を使用する必要があります。

obj[prop]

しかし、それだけではありません:プロパティ名の配列Object.getOwnPropertyNamesを返します。暗黙的な型強制のために機能する可能性がありますが、実際には配列の最初の要素を取得する必要があります。"errmsg" == key

var key = Object.getOwnPropertyNames(jsonparsed)[0]; // get first element

if("errmsg" === key) {
    throw ("Error says:"+jsonparsed[key]);
}
else {
    alert("Data says:"+jsonparsed[key]);
}
于 2013-08-26T08:51:26.217 に答える